Manipulation chaine de caractères [Résolu]

banane_rose 302 Messages postés lundi 11 avril 2005Date d'inscription 22 avril 2006 Dernière intervention - 14 déc. 2005 à 13:39 - Dernière réponse : banane_rose 302 Messages postés lundi 11 avril 2005Date d'inscription 22 avril 2006 Dernière intervention
- 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 

Votre réponse

15 réponses

Meilleure réponse
dark_naruto25 127 Messages postés mardi 23 août 2005Date d'inscription 9 mai 2011 Dernière intervention - 14 déc. 2005 à 15:05
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.

Merci dark_naruto25 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de dark_naruto25
Meilleure réponse
deck_bsd 1244 Messages postés jeudi 31 mars 2005Date d'inscription 3 août 2016 Dernière intervention - 14 déc. 2005 à 15:06
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

Merci deck_bsd 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de deck_bsd
banane_rose 302 Messages postés lundi 11 avril 2005Date d'inscription 22 avril 2006 Dernière intervention - 14 déc. 2005 à 15:39
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
luhtor 2023 Messages postés mardi 24 septembre 2002Date d'inscription 28 juillet 2008 Dernière intervention - 14 déc. 2005 à 16:29
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
banane_rose 302 Messages postés lundi 11 avril 2005Date d'inscription 22 avril 2006 Dernière intervention - 15 déc. 2005 à 16:23
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
dark_naruto25 127 Messages postés mardi 23 août 2005Date d'inscription 9 mai 2011 Dernière intervention - 15 déc. 2005 à 16:44
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
banane_rose 302 Messages postés lundi 11 avril 2005Date d'inscription 22 avril 2006 Dernière intervention - 15 déc. 2005 à 16:49
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
cs_Joky 1791 Messages postés lundi 22 novembre 2004Date d'inscription 31 janvier 2009 Dernière intervention - 15 déc. 2005 à 17:26
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
deck_bsd 1244 Messages postés jeudi 31 mars 2005Date d'inscription 3 août 2016 Dernière intervention - 15 déc. 2005 à 17:49
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
deck_bsd 1244 Messages postés jeudi 31 mars 2005Date d'inscription 3 août 2016 Dernière intervention - 15 déc. 2005 à 17:51
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
deck_bsd 1244 Messages postés jeudi 31 mars 2005Date d'inscription 3 août 2016 Dernière intervention - 15 déc. 2005 à 19:05
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
deck_bsd 1244 Messages postés jeudi 31 mars 2005Date d'inscription 3 août 2016 Dernière intervention - 15 déc. 2005 à 19:44
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
deck_bsd 1244 Messages postés jeudi 31 mars 2005Date d'inscription 3 août 2016 Dernière intervention - 15 déc. 2005 à 19:51
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
deck_bsd 1244 Messages postés jeudi 31 mars 2005Date d'inscription 3 août 2016 Dernière intervention - 15 déc. 2005 à 19:51
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
banane_rose 302 Messages postés lundi 11 avril 2005Date d'inscription 22 avril 2006 Dernière intervention - 15 déc. 2005 à 21:28
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

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.