Je voudrais diviser une chaîne le long des espaces, et je sais que les jetons représentent des entiers valides. Je voudrais transformer les jetons en nombres entiers et y peupler un vecteur.
Je pourrais utiliser boost :: split, créer un vecteur de chaînes de jetons, puis utiliser std :: transform.
Quelle est votre solution? L’utilisation de boost est acceptable.
Quelque chose comme ça:
std::issortingngstream iss("42 4711 "); std::vector results( std::istream_iterator (iss) , std::istream_iterator () );
?
Vous pouvez utiliser Boost.Tokenizer . Il peut facilement être explode_ssortingng
dans une fonction explode_ssortingng
qui prend une chaîne et le délimiteur et renvoie un vecteur de jetons.
Utiliser transform
sur le vecteur retourné est une bonne idée pour la transformation de chaînes en entiers; vous pouvez également simplement passer l’iterator Boost.Tokenizer dans l’algorithme de transform
.
Utilisez la bibliothèque d’algorithmes de chaînes de Boost pour split
la chaîne en un vecteur de chaînes, puis std::for_each
et atoi
ou boost::lexical_cast
pour les boost::lexical_cast
en boost::lexical_cast
. Cela sera probablement beaucoup plus simple que d’autres méthodes, mais n’aura peut-être pas les meilleures performances en raison de la copie (si quelqu’un a un moyen de l’améliorer et de le supprimer, veuillez commenter).
std::vector numbers; void append(std::ssortingng part) { numbers.push_back(boost::lexical_cast (part)); } std::ssortingng line = "42 4711"; // borrowed from sbi's answer std::vector parts; split(parts, line, is_any_of(" ,;")); std::for_each(parts.being(), parts.end(), append);
Grossièrement.
http://www.boost.org/doc/libs/1_44_0/doc/html/ssortingng_algo.html http://www.boost.org/doc/libs/1_44_0/libs/conversion/lexical_cast.htm
Vous pouvez toujours utiliser strtok ou ssortingng.find ().