私はブーストストリングライブラリを使って遊んでいて、スプリット方法のすばらしさを簡単に見つけました。素晴らしく、簡潔になりboost splitでescaped_list_separatorを使用する
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に感謝しますが、私はすでに望ましい結果を達成するために廃止されていない方法を持っています。私はそれがかなり面倒だと思っています。それをよりシンプルで洗練されたソリューションに置き換えることができなければ、さらに別の方法。
EDIT:結果を表示し、質問を明確にするためのコードが更新されました。
出力を表示すると、指定した例が改善されます。このページにコードが何をするのかを知る人には、それを豊富に明確にするだけです。 –