Manipulation chaine de caractères

Résolu
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006 - 14 déc. 2005 à 13:39
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006 - 15 déc. 2005 à 21:28
bonjour,



voilà j'ai ça par exemple :

zéro;un;deux;trois

comment je peux faire pour "extraire" de cette chaîne de caractère les mots entre ";" considérant ";" comme un séparateur ?



merci


<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .

15 réponses

dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
14 déc. 2005 à 15:05
euh, il faut revoir ta bible du C++, parce que c'est quelque chose de très bête
une boucle qui lit caractère par caractère ta chaine, et rentre les caractères dans un tableau, quand ';' est rencontré tu change la case du tableau... rien de plus simple.
3
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
14 déc. 2005 à 15:06
sscanf(phrase,"%[^;]; %[^;]; %[^;]; %[^;];",var_1,var_2,var_3,var_4);



phrase est la variable contenant "zéro;un;deux;trois"

%[^;]; veut dire qu'il prend tous les caractères jusqu'à le ; .

var_1 contiendra "zéro"

...



Bon code

++ALl
3
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
14 déc. 2005 à 15:39
justement ... j'ai prété ma bible ...

merci pour votre aide ^^

je teste ça de suite



ayé j'ai compris !

merci beaucoup

je tacherai de récupérer ma bible à l'occas lol



+++

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
14 déc. 2005 à 16:29
Bon ma version à moi ^^ :

std::string phrase("un;deux;trois");



std::istringstream iss(phrase);



std::string un, deux, trois;

std::getline(iss, un, ';');

std::getline(iss, deux, ';');

std::getline(iss, trois, ';');
0

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

Posez votre question
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
15 déc. 2005 à 16:23
est ce que y'a encore quelqu'un ?

je voudrais juste savoir comment faire pour supprimer un morceau d'une chaine de caractères

exemple:

0;1;2;3;4;

cherche 3

si trouve delete

après : 0;1;2;4;

en gros c'est ça


<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
dark_naruto25 Messages postés 127 Date d'inscription mardi 23 août 2005 Statut Membre Dernière intervention 9 mai 2011
15 déc. 2005 à 16:44
Là ce n'est pas une question de bible... C'est encore très simple cette fois ci, tu fais exactement comme tu ferais à la main.
0
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
15 déc. 2005 à 16:49
svp donne moi du code, t'a peut etre compris que je suis un peu neuneu sur des bases ...

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
15 déc. 2005 à 17:26
Moi je le sais depuis longtemp que t'es un peu neuneu sur les bords :)
if(!Meilleur("Joky")) return ERREUR;<
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
15 déc. 2005 à 17:49
void (char *phrase,char *new_phrase,char caract_a_supp){



char carac;



while(*phrase!='\0'){

if(*phrase==caract_a_sup){

phrase++;

}

carac=*phrase;

*new_phrase=carac;

phrase++;

new_phrase++;

}



}



j'ai testé sous dev-cpp, et cela fonctionne à merveille mdr.



Bon code

++All
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
15 déc. 2005 à 17:51
ouuups erreur de retranscription, j'ai oublié le nom de la procédure, ba tu met ce que tu veut mdr.



++All
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
15 déc. 2005 à 19:05
Encore mieu :



void nochar(char *phrase,char *new_phrase,char caract_a_supp){



char carac,*pt1=phrase,*pt2=new_phrase;



while(*phrase!='\0'){

if(*phrase==caract_a_sup){

phrase++;

}

carac=*phrase;

*new_phrase=carac;

phrase++;

new_phrase++;

}



strcpy(pt1,pt2);



}



Comme ça , avec un seul buffer (ici new_phrase) tu est tranquille, pas
besoin d'en déclarer un à chaque fois que tu veut retirer un caractère.




En claire phrase ne contiendra plus 0;1;2;3;4 contiendra la phrase modifiée à savoir 0;1;2;;4 si c'est le 3 que tu à retiré.



Arf flute j'avai pas vu que tu devait aussi retirer un ; .

Ben tu change le if et le tour est joué :



if(*phrase==caract_a_sup){

phrase++;

if(*phrase==';'){

phrase++;

}

}



tu ne peut pas mettre *phrase==';' en faisant un || dans le premier if sinon ce sera tout tes ; qui seront éffacés.



Voila, j'espère que cela t'aidera.



j'ai testé sous dev-cpp, et cela fonctionne à merveille mdr.



Bon code

++All
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
15 déc. 2005 à 19:44
RE ,



C'est encore moi,



En testant, j'ai remarqué que si tu supprimais 2 nombres et bien il les remplacait par ;4

ex : supprime 0 et 3:

rend : 1;2;4;4



Voici la version corrigée. Une amélioration à aussi été apportée, plus
besoin de déclarer un buffer (new_phrase) celui-ci est directement
déclaré dans la procédure :



void l(char *phrase,char caract,int D_iNbr){



char Car;

char *new_phrase,*pt1=phrase,*pt2;



new_phrase=(char*)malloc(sizeof(char)*D_iNbr);

pt2=new_phrase;



while(*phrase!='\0'){

if(*phrase==caract){

phrase++;

if(*phrase==';'){

phrase++;

}

}else{

Car=*phrase;

*new_phrase=Car;



phrase++;

new_phrase++;

}

}

*new_phrase='\0';

strcpy(pt1,pt2);

}

La nouvelle variable demandée en paramètre est D_iNbr qui doit contenir la taille de la phrase à modifier. Voila c'est tout.



Dernière chose, si ta phrase vas jusque 10 et plus.

ex : 0;1;2;3;4;5;6;7;8;9;10



Sache que si par exemple tu veut supprimer 1 et 0 le 1 et le 0 du 10
seront supprimer aussi. Ci tu veut pas, modifie le 1er if en ajoutant
un && *(phrase+1)==';' .



Voila, maintenant je te laisse a ton code mdr, j'estime en avoir fait assez.



++All
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
15 déc. 2005 à 19:51
C'est le dernier je jure,



rajout le free(new_phrase) a la fin .



promis je post plus
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
15 déc. 2005 à 19:51
C'est le dernier je jure,



rajout le free(new_phrase) a la fin .



promis je post plus
0
banane_rose Messages postés 302 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 22 avril 2006
15 déc. 2005 à 21:28
waaaa trop simpa votre aide .. désolé je vais regarder ça demain après
midi , là j'ai plus le temps et demain aprèm j'ai pas cours .... ^^

+++

à demain

Dorian

<hr size="2" width="100%">Dorian / 14 ans / sous Dev-C++

I always need help ... . . . . . . . . .
0
Rejoignez-nous