J'utilise la méthode boost::split
pour diviser une chaîne comme ceci:C++ boost Éclate une chaîne
je d'abord vous assurer d'inclure l'en-tête correct d'avoir accès à boost::split
:
#include <boost/algorithm/string.hpp>
alors:
vector<string> strs;
boost::split(strs,line,boost::is_any_of("\t"));
et la ligne est comme
"test test2 test3"
Voilà comment je consume le vecteur de chaîne de résultat:
void printstrs(vector<string> strs)
{
for(vector<string>::iterator it = strs.begin();it!=strs.end();++it)
{
cout << *it << "-------";
}
cout << endl;
}
Mais pourquoi dans le résultat strs
je ne reçois que "test2"
et "test3"
, ne devraient pas être "test"
, "test2"
et "test3"
, il y a \t
(onglet) en la chaîne.
Mise à jour le 24 avril 2011: Il semblait après avoir changé une ligne de code à printstrs
je peux voir la première chaîne. J'ai changé
cout << *it << "-------";
à
cout << *it << endl;
Et il me semblait "-------"
couvert la première chaîne en quelque sorte.
Montrez comment vous travaillez avec le vecteur.Je suppose que le problème est là. –
'boost :: is_any_of (" \ t ")' est moins efficace que '[] (char c) {return c == '\ t';}'. Vous voulez juste vérifier une seule possibilité. (Aucune raison pour laquelle il n'y a pas de boost: is ('\ t') ') – MSalters
Que signifie le commentaire dans @MSalters? Comment puis-je utiliser ce code pour substituer 'boost :: is_any_of()'? –