Ich spiele gerade mit der Boost Strings Library herum und bin dabei auf die geniale Einfachheit der Split-Methode gestoßen.
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\""}
Das wäre schön und prägnant... aber es scheint nicht mit Anführungszeichen zu funktionieren und stattdessen muss ich etwas wie das Folgende tun
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\""}
Meine Frage ist, ob Split oder ein anderer Standardalgorithmus verwendet werden kann, wenn Sie Trennzeichen in Anführungszeichen haben? Danke an purpledog, aber ich habe bereits einen nicht veralteten Weg, um das gewünschte Ergebnis zu erreichen, ich denke nur, dass es ziemlich umständlich ist, und es sei denn, ich könnte es mit einer einfacheren, eleganteren Lösung ersetzen, würde ich es im Allgemeinen nicht verwenden, ohne es zuerst in eine weitere Methode zu verpacken.
EDIT: Code aktualisiert, um Ergebnisse zu zeigen und die Frage zu klären.