Alternative à la fonction strtok ? [Résolu]

Signaler
Messages postés
64
Date d'inscription
vendredi 16 septembre 2005
Statut
Membre
Dernière intervention
31 mars 2009
-
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
-
Bonjour je cherche une alternative a cette fonction car je trouve quelle n'est vraiment pas bien (disons pas adapté pour mon utilisation) En réalité je ne peut utiliser strtok car je suis en multi tache et strtok semble utiliser une variable globale ... bref je veut utiliser autre chose !

Je veut séparer une string avec comme délimitateur ";"

Je ne peut pas utiliser getline non plus car le type que je recoit est une string

ex: std::string sData="ppp;aaa;bbb"

Merci !

5 réponses

Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
Salut,

si ton seul problème est le multithread.

tu peux utiliser strtok_r qui résoud ton problème.



sinon pour le découpage tu peux faire find toi-même du ';'

ou une bonne méthode bourrin : utiliser un istringstream

sur ta std::string puis un getline en précisant le séparateur ici ';'

ex: (non compilé mais c'est pour l'idée)



string line = "aaaa;bbbb;cccc";

istringstream iss( line );

string word;

while( getline( iss, word, ';' ) )

cout << word << endl;



je te laisse en exercice la version avec les find ;)

Ma participation à la saturation du net:
http://hylvenir.free.fr
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
"Bon pour istringstream j'y avais penser mais je peut pas car je recoit un type string et non istringstream"



pourquoi tu peux pas créer un istringstream à partir de ta std::string. ?



sinon, tu découpes toi même avec std::string.find




Ma participation à la saturation du net:
http://hylvenir.free.fr
Messages postés
64
Date d'inscription
vendredi 16 septembre 2005
Statut
Membre
Dernière intervention
31 mars 2009
1
Bon pour istringstream j'y avais penser mais je peut pas car je recoit un type string et non istringstream


strtok_r : c'est la version récursive c'est ca , mais je ne toruve pas d'info la dessus , elle semble absente de msdn. Quelle include prend t'elle ? J'avais trouvé en effectuant des recherches mais vut quelle n'est pas sur msdn je galère.

char *strtok_r (char *s‚ const char *delim‚ char **ptrptr);
Messages postés
64
Date d'inscription
vendredi 16 septembre 2005
Statut
Membre
Dernière intervention
31 mars 2009
1
Merci beaucoup , j'ai regler mon probleme avec ta solution , j'ai etuliser un istringstream.

Au fait , il ont fumer la moquette quand il ont creer strtok ?? Sérieusement , ca modifie la string que tu lui passe en parametre et utilise une variable globale privé, wow ! c'est pas trop dur d'avoir des problème avec ca ... c'est loin d'être multi thread proove
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
c'était pas le but à l'époque.

mais en effet, ça peut crainde.

Ma participation à la saturation du net:
http://hylvenir.free.fr