Je ne sais pas comment utiliser boost::is_any_of
pour diviser une chaîne en utilisant un ensemble de caractères, dont l'un doit diviser la chaîne.
Je voulais faire quelque chose comme ça car j'ai compris que la fonction is_any_of prend un paramètre Set.
std::string s_line = line = "Please, split|this string";
std::set<std::string> delims;
delims.insert("\t");
delims.insert(",");
delims.insert("|");
std::vector<std::string> line_parts;
boost::split ( line_parts, s_line, boost::is_any_of(delims));
Cependant, cela produit une liste d'erreurs boost/STD. Dois-je persister avec is_any_of
ou existe-t-il une meilleure façon de le faire, par exemple. en utilisant un regex split?
Vous devez essayer ceci:
boost::split(line_parts, s_line, boost::is_any_of("\t,|"));
Votre première ligne n'est pas une syntaxe C++ valide sans une variable préexistante nommée line
et boost::is_any_of
ne prend pas de std::set
comme paramètre constructeur.
#include <string>
#include <set>
#include <vector>
#include <iterator>
#include <iostream>
#include <boost/algorithm/string.hpp>
int main()
{
std::string s_line = "Please, split|this\tstring";
std::string delims = "\t,|";
std::vector<std::string> line_parts;
boost::split(line_parts, s_line, boost::is_any_of(delims));
std::copy(
line_parts.begin(),
line_parts.end(),
std::ostream_iterator<std::string>(std::cout, "/")
);
// output: `Please/ split/this/string/`
}
Le principal problème est que boost::is_any_of
prend un std::string
ou un char*
comme paramètre. Pas un std::set<std::string>
.
Vous devez définir delims
comme std::string delims = "\t,|"
et cela fonctionnera.