Manipulation chaine de caractères [Résolu]

Signaler
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006
-
banane_rose
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006
-
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

Messages postés
127
Date d'inscription
mardi 23 août 2005
Statut
Membre
Dernière intervention
9 mai 2011

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.
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
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
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

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 ... . . . . . . . . .
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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, ';');
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

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 ... . . . . . . . . .
Messages postés
127
Date d'inscription
mardi 23 août 2005
Statut
Membre
Dernière intervention
9 mai 2011

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.
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

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 ... . . . . . . . . .
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
Moi je le sais depuis longtemp que t'es un peu neuneu sur les bords :)
if(!Meilleur("Joky")) return ERREUR;<
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
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
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
ouuups erreur de retranscription, j'ai oublié le nom de la procédure, ba tu met ce que tu veut mdr.



++All
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
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
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
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
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
C'est le dernier je jure,



rajout le free(new_phrase) a la fin .



promis je post plus
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
C'est le dernier je jure,



rajout le free(new_phrase) a la fin .



promis je post plus
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006

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 ... . . . . . . . . .