Le mieu pour faire ce que tu a a faire est d'utiliser la librairie c++ BOOST et sa fonction tokenizer
Le programme suivant illustre comment utiliser boost::tokenizer pour découper une chaîne de caractères selon des séparateurs par défaut, ou selon une liste de séparateurs bien précis :
Code :
- #include <iostream>
- #include <boost/tokenizer.hpp>
- // découpe la chaine avec les séparateurs par défaut
- void split( const std::string & Msg )
- {
- // utiliser le tokenizer par défaut
- boost::tokenizer<> tok( Msg );
- // itérer la séquence de tokens
- for ( boost::tokenizer<>::const_iterator i = tok.begin();
- i != tok.end();
- ++i )
- {
- // afficher chaque token extrait
- std::cout << *i << '\n';
- }
- }
- // découpe la chaine selon les séparateurs donnés
- void split( const std::string & Msg, const std::string & Separators )
- {
- // typedef pour alléger l'écriture
- typedef boost::tokenizer<boost::char_separator<char> > my_tok;
- // séparateur personnalisé
- boost::char_separator<char> sep( Separators.c_str() );
- // construire le tokenizer personnalisé
- my_tok tok( Msg, sep );
- // itérer la séquence de tokens
- for ( my_tok::const_iterator i = tok.begin();
- i != tok.end();
- ++i )
- {
- // afficher chaque token extrait
- std::cout << *i << '\n';
- }
- }
- int main()
- {
- std::cout << "-- exemple 1 --\n";
- split( "mot1;mot2; ;mot3;;mot4;mot5;" );
-
- std::cout << "-- exemple 2 --\n";
- split( "mot-compose1;mot,compose2;[mot][compose3];mot compose4;<mot><compose><5>", ";" );
- }
|
Ce programme produit le résultat suivant :
-- exemple 1 --
mot1
mot2
mot3
mot4
mot5
-- exemple 2 --
mot-compose1
mot,compose2
[mot][compose3]
mot compose4
<mot><compose><5>
Notez que les token vides (";;" par exemple) ne sont pas pris en compte.
---------------
Les ventes de véhicules neufs ont chuté de 7%, y'en a marre des pirates qui téléchargent illégalement des voitures sur internet !!