Découper un string en plusieurs strings

novaghost Messages postés 27 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 4 avril 2007 - 20 févr. 2007 à 16:11
novaghost Messages postés 27 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 4 avril 2007 - 21 févr. 2007 à 11:12
Bien le bonjour mesdames, messieurs

Je viens vous exposer mon problème je souhaiterais découper un string en plusieurs savez vous quelle est la méthode la plus simple et la plus propre ?

Je tiens à préciser que j'ai déjà rechercher sur google et sur CS mais sans nul doute certains d'entre vous doivent avoir un guide à me faire partager.

Pour l'histoire sous google "Decouper un string" ammène sur des pages qui ne sont pas nonchalantes. :p

5 réponses

mhip Messages postés 6 Date d'inscription lundi 14 juillet 2003 Statut Membre Dernière intervention 28 février 2007
20 févr. 2007 à 16:50
Il existe la fonction strtok qui permet de decouper une chaine de caracteres. Sinon en c++ regarde l'interface de la classe string
0
novaghost Messages postés 27 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 4 avril 2007 1
20 févr. 2007 à 16:58
effectivement j'avais zappé cette fonction. ;)
0
novaghost Messages postés 27 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 4 avril 2007 1
20 févr. 2007 à 17:18
Dsl en fait je cherche un moyen de découper sans passer par un char *.
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
21 févr. 2007 à 09:42
Salut, tu peux utiliser Boost qui fait ca très bien :


#include
#include


// découpe la chaine selon les séparateurs donnés
vector<string> split( const std::string & Msg, const std::string & Separators )
{
vector<string> v;

// typedef pour alléger l'écriture
typedef boost::tokenizer > 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 )
v.push_back(*i);

return v;
}

Tu l'appelle ensuite comme ca :
split( "mot-compose1;mot,compose2;[mot][compose3];mot compose4;<mot><compose><5>", ";" );

Ton vector contiendra ainsi :
mot-compose1
mot,compose2
[mot][compose3]
mot compose4
<mot><compose><5>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
novaghost Messages postés 27 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 4 avril 2007 1
21 févr. 2007 à 11:12
C'est bon j'ai utilisé un iss. Je donne ma méthode, même si boost est pas mal, mais dans mon cas je préfère utiliser la mienne.

Mon fichier : "fichier.txt"
syntaxe des lignes : "bonjour, je, suis, un, exemple ; daccord , et, bien, moi, aussi;"

string cmd,commande;
ifstream tableau("fichier.txt");

while ( getline( tableau, commande, ';' ) )       // Recupération des lignes dans le fichier (commande est ma string à redécouper)
{
   commande=commande.substr(commande.find_first_not_of(' ')); // On enleve l'espace des string (histoire de chipoter)

    istringstream option(commande.data( ));      //surment pas la meilleure chose à faire
    while ( getline( option, cmd, ',')
     {
        cout << cmd << endl;
     }
}

Et si je me trompe pas cela donne :
bonjour
je
suis
un
exemple
daccord
et
bien
moi
aussi

Je dois découper ma string en deux suivant les " ; " puis en morceaux suivant les " , "
J'ai un autre problème après celui-ci pour comparé un morceau dans la partie avant le " ; " avec une ligne d'un autre fichier et si je trouve ce morceau dans la ligne de l'autre fichier. Je dois remplacer ce morceau par le morceau dans la partie après le " ; "
ex :

dans fichier.txt
"bonjour, je, suis, un, exemple ; daccord , et, bien, moi, aussi;"

dans fichier "original.txt"
"bonjour comment ca va ?"

J'extrait les morceaux de la ligne fichier.txt et je les comparent avec la première ligne de original.txt
Le but étant de trouver "bonjour" et le remplacer par "daccord" ou bien "je" par "et" si "je" est trouvé.
 Je sais c'est confu mais si quelqu'un à une idée car le find j'ai du mal à trouver ou le mettre.
0
Rejoignez-nous