Допустим, у меня есть std :: string «55 | 6999 | dkfdfd |». Он состоит из 3 частей (каждая сопровождается |). В настоящее время я помещаю строку в stringstream и использую getline для их восстановления. Однако мне интересно, есть ли более простое решение, которое не требует потоков. Мне просто нужен простой способ получить строку из этой строки, используя ‘|’ как делим, поскольку я думаю, что потоки излишни для этого, и я делаю это неправильно.
Если буст разрешен, то 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("|"));
То, о чем вы говорите, называется «токенизацией» строки. Это было бы вообще вашим лучшим выбором. Что касается того, как это сделать, смотритеКак я могу токенизировать строку в C ++?«
Вы могли бы использовать std::strtok
вместо:
char *token = std::strtok(<yourstring>, "|");
< yourstring> должен быть типа char*
хоть; а затем использовать NULL
для тех, кто после этого, std::strtok
отслеживает ранее использованную строку.
token = std::strtok(NULL, "|");