Alternative à la fonction strtok ? [Résolu]

cs_chuckboy 64 Messages postés vendredi 16 septembre 2005Date d'inscription 31 mars 2009 Dernière intervention - 20 oct. 2005 à 21:35 - Dernière réponse : Hylvenir 364 Messages postés mercredi 11 février 2004Date d'inscription 5 octobre 2006 Dernière intervention
- 20 oct. 2005 à 22:45
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 !
Afficher la suite 

5 réponses

Répondre au sujet
Hylvenir 364 Messages postés mercredi 11 février 2004Date d'inscription 5 octobre 2006 Dernière intervention - 20 oct. 2005 à 21:45
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Hylvenir
Hylvenir 364 Messages postés mercredi 11 février 2004Date d'inscription 5 octobre 2006 Dernière intervention - 20 oct. 2005 à 22:22
+3
Utile
"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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Hylvenir
cs_chuckboy 64 Messages postés vendredi 16 septembre 2005Date d'inscription 31 mars 2009 Dernière intervention - 20 oct. 2005 à 21:50
0
Utile
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);
Commenter la réponse de cs_chuckboy
cs_chuckboy 64 Messages postés vendredi 16 septembre 2005Date d'inscription 31 mars 2009 Dernière intervention - 20 oct. 2005 à 22:42
0
Utile
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
Commenter la réponse de cs_chuckboy
Hylvenir 364 Messages postés mercredi 11 février 2004Date d'inscription 5 octobre 2006 Dernière intervention - 20 oct. 2005 à 22:45
0
Utile
c'était pas le but à l'époque.

mais en effet, ça peut crainde.

Ma participation à la saturation du net:
http://hylvenir.free.fr
Commenter la réponse de Hylvenir

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.