Je joue avec la bibliothèque de chaînes boost et je viens de rencontrer la simplicité impressionnante de la méthode split.Utilisation de escaped_list_separator avec split boost
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\""}
Ce qui serait bien et concis ... mais il ne semble pas travailler avec des citations et au lieu que je dois faire quelque chose comme
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\""}
suivant Ma question est peut diviser ou d'une autre algorithme standard être utilisé lorsque vous avez cité des délimiteurs? Merci à Purpledog mais j'ai déjà un moyen non-obsolète d'atteindre le résultat souhaité, je pense juste que c'est assez lourd et à moins que je puisse le remplacer par une solution plus simple et élégante je ne l'utiliserais pas en général sans l'envelopper encore une autre méthode.
EDIT: Code mis à jour pour afficher les résultats et clarifier la question.
L'exemple que vous avez donné serait amélioré si vous montriez la sortie aussi. Juste pour le rendre très clair à tous ceux qui trouvent cette page ce que fait le code. –