Trouver une sous chaine dans une chaine

Signaler
Messages postés
2
Date d'inscription
mercredi 16 mars 2005
Statut
Membre
Dernière intervention
16 mars 2005
-
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013
-
Bonjour



je souhaite trouver une sous chaine dans une chaine qui a des separateurs



ma chaine est ;xpos=10,4;ypos=11,2;zpos=3,6;



et je souhaite morceler ma chaine pour avoir les sous chaines entre les separateurs ";"



et avoir mot1="xpos=10"

mot2="ypos=11,2"

mot3="zpos=3,6"



mot1 mot2 et mot3 etant des chaine de caracteres





je sais que en php on peut faire ceci


si on appelle ExtractChamp("essai;test",1,";"), ça renvoie
"essai".

si on appelle ExtractChamp("essai;test;toto",3,";"), ça
renvoie "toto".



en faite je souhaiterais faire ca en c++



mille merci

4 réponses

Messages postés
117
Date d'inscription
mardi 22 juillet 2003
Statut
Membre
Dernière intervention
21 janvier 2011

strrchr recherche un caractère dans une chaine, il te suffit de rechercher les ";" pour ensuite placer ce qu'il y a entre dans tes variables mot.
Messages postés
2
Date d'inscription
mercredi 16 mars 2005
Statut
Membre
Dernière intervention
16 mars 2005

desolé mais
je vois pas trop comment l utiliser car une fois que je connais la possition de ";" comment je donne a mon mots la valeurs entre les 2 ";"
Messages postés
117
Date d'inscription
mardi 22 juillet 2003
Statut
Membre
Dernière intervention
21 janvier 2011

et bien je te propose une solution (qui n'utilise pas strrchr ;-) :


char chaine[]=";xpos=10,4;ypos=11,2;zpos=3,6;";

char mot[3][20];

int a=0, pos=1;

for(
int i=1; i<strlen(chaine); i++)
{

if(chaine[i]==';')
{

//on a repéré la fin du mot
for(
int k=pos; k<i; k++)
mot[a][k-pos]=chaine[k];
mot[a][i-pos]='\0';
pos=i+1;
a++;
}
}
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

Si tu as toujours 3 "sous chaines " tu peux faire



data = "xpos=10,4;ypos=11,2;zpos=3,6";


char mot1[0xFFF],mot2[0xFFFF],mot3[0xFFFF];



wsprintf(mot1,"%s",strtok(data,";"));

wsprintf(mot2,"%s",strtok(NULL,";"));

wsprintf(mot3,"%s",strtok(NULL,";"));



Sinon utlise cette fonction



char* gettok(char *data, int pos, char *C, int all)

{

char* Token;

int i;

char data2[1024];

lstrcpy(data2,data);

Token = strtok(data2,C);

for (i = 1; Token && (i < pos); i++) {



if (i == (pos-1) && all) return strtok(NULL,"");

else Token = strtok(NULL,C);

}

if (all) return strtok(data,"");

//if (!Token)

// lstrcpy(Token,"\0");

return Token;

}