Getline из строки (не из stringstream)

Допустим, у меня есть std :: string «55 | 6999 | dkfdfd |». Он состоит из 3 частей (каждая сопровождается |). В настоящее время я помещаю строку в stringstream и использую getline для их восстановления. Однако мне интересно, есть ли более простое решение, которое не требует потоков. Мне просто нужен простой способ получить строку из этой строки, используя ‘|’ как делим, поскольку я думаю, что потоки излишни для этого, и я делаю это неправильно.

0

Решение

Если буст разрешен, то boost::split будет вариант. Может использоваться для заполнения std::vector<std::string>, который будет содержать поля извлечено из ввода на основе указанного разделителя (ей):

#include <vector>
#include <string>
using std::vector;
using std::string;

#include <boost/algorithm/string.hpp>
#include <boost/algorithm/string/split.hpp>
using boost::split;
using boost::is_any_of;

vector<string> fields;
split(fields, "55|6999|dkfdfd|", is_any_of("|"));
2

Другие решения

То, о чем вы говорите, называется «токенизацией» строки. Это было бы вообще вашим лучшим выбором. Что касается того, как это сделать, смотритеКак я могу токенизировать строку в C ++?«

1

Вы могли бы использовать std::strtok вместо:

char *token = std::strtok(<yourstring>, "|");

< yourstring> должен быть типа char* хоть; а затем использовать NULL для тех, кто после этого, std::strtok отслеживает ранее использованную строку.

token = std::strtok(NULL, "|");
1