Я играю с библиотекой строк повышения и только что наткнулся на потрясающую простоту метода разделения.
string delimiters = ",";
string str = "string, with, comma, delimited, tokens, \"and delimiters, inside a quote\"";
// If we didn't care about delimiter characters within a quoted section we could us
vector<string> tokens;
boost::split(tokens, str, boost::is_any_of(delimiters));
// gives the wrong result: tokens = {"string", " with", " comma", " delimited", " tokens", "\"and delimiters", " inside a quote\""}
Это было бы красиво и лаконично... однако, похоже, это не работает с кавычками, и вместо этого мне нужно сделать что-то вроде следующего
string delimiters = ",";
string str = "string, with, comma, delimited, tokens, \"and delimiters, inside a quote\"";
vector<string> tokens;
escaped_list_separator<char> separator("\\",delimiters, "\"");
typedef tokenizer<escaped_list_separator<char> > Tokeniser;
Tokeniser t(str, separator);
for (Tokeniser::iterator it = t.begin(); it != t.end(); ++it)
tokens.push_back(*it);
// gives the correct result: tokens = {"string", " with", " comma", " delimited", " tokens", "\"and delimiters, inside a quote\""}
Мой вопрос: можно ли разделить или использовать другой стандартный алгоритм, когда у вас есть разделители в кавычках? Благодаря Purpledog, но у меня уже есть не устаревший способ достижения желаемого результата, я просто думаю, что он довольно громоздкий, и если бы я не мог заменить его более простым и элегантным решением, я бы вообще не использовал его без предварительной упаковки. еще один метод.
РЕДАКТИРОВАТЬ: Обновлен код для отображения результатов и уточнения вопроса.