Manipulation chaine de caractères [Résolu]

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

15 réponses

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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dark_naruto25
Messages postés
1244
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de deck_bsd
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006
0
Merci
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 ... . . . . . . . . .
Commenter la réponse de banane_rose
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
4
0
Merci
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, ';');
Commenter la réponse de luhtor
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006
0
Merci
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 ... . . . . . . . . .
Commenter la réponse de banane_rose
Messages postés
127
Date d'inscription
mardi 23 août 2005
Statut
Membre
Dernière intervention
9 mai 2011
0
Merci
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.
Commenter la réponse de dark_naruto25
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006
0
Merci
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 ... . . . . . . . . .
Commenter la réponse de banane_rose
Messages postés
1791
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
0
Merci
Moi je le sais depuis longtemp que t'es un peu neuneu sur les bords :)
if(!Meilleur("Joky")) return ERREUR;<
Commenter la réponse de cs_Joky
Messages postés
1244
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
0
Merci
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
Commenter la réponse de deck_bsd
Messages postés
1244
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
0
Merci
ouuups erreur de retranscription, j'ai oublié le nom de la procédure, ba tu met ce que tu veut mdr.



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



rajout le free(new_phrase) a la fin .



promis je post plus
Commenter la réponse de deck_bsd
Messages postés
1244
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
1
0
Merci
C'est le dernier je jure,



rajout le free(new_phrase) a la fin .



promis je post plus
Commenter la réponse de deck_bsd
Messages postés
302
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
22 avril 2006
0
Merci
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 ... . . . . . . . . .
Commenter la réponse de banane_rose