Remplacemnt de chaines de caractères

borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011 - 17 mai 2004 à 18:08
borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011 - 4 juin 2004 à 10:50
borgeomibonjouuuuuuur !!!!!

peut-on utiliser replace_if ou transform pour modiifier dans une chaîne un suite de caractères par une autre ( longueurs différentes )

exemple string s = "ab;;ab;ab;;acf;;";

remplacerr tous le ";;" par "; ;"

Merrci d'avance

15 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
17 mai 2004 à 19:36
Voici la solution que je te propose...
Vu que je ne savais pas si tu faisais du C ou C++, je l'ai fait en C pour qu'il n'y ai pas de probleme.
Le principe est simple...
On se sert de la fonction strtok qui permet de découper une chaine selon un separateur défini a l'avance...
Ensuite en recupere chaque element de la chaine découpée puis on mets entre la nouvelle chaine de remplacement.

Dans mon exemple j'ai définie mes varaibles avec une atille de 1000 pour les chaines que l'on va traiter et de 50 our les séparaters... SI les tailles ne correspondent pas a tes besoins, tu n'auras cas les modifiers.

Voici le code complet que tu pourras mettre dans une fonction :

#include <stdio.h>
#include <string.h>
#include 

int main()
{
char * initial_str = new char[1000];
char * new_str = new char[1000];
char * strfind = new char[50];
char * strreplace = new char[50];
char * token;

*new_str = NULL;

strcpy(initial_str,"salut;;comment;;ca;;va");
strcpy(strfind,";;");
strcpy(strreplace,"; ;");

token = strtok(initial_str,strfind);

while(token!=NULL)
{
strcat(new_str,token);
strcat(new_str,strreplace);
token = strtok(NULL,strfind);
}

cout << new_str << endl;

return 0;
}


J'espere que ce bout de code te seras utile...
A++ et bonne prog ...

Samir
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 mai 2004 à 21:17
DeAtHCrAsH > c'est pas toi qui disais qu'il fallait pas etre crados? parce que la tu melange du c avec du c++...
et comme borgeomi parle de string a mon avis c'est du c++ qu'il veut, non?

#include 
#include <string>

using namespace std;

int main()
{
string s("ab;;ab;ab;;acf;;");
string r("; ;");
string::size_type ind;

while( (ind=s.find(";;")) != string::npos )
    s.replace(ind,r.size(),r);

cout << s << '\n';

cout.flush();
cin.get();
}
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 mai 2004 à 21:19
et je crois que tu a oublié quelque delete[]
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
17 mai 2004 à 21:31
djl> Mdrrr tu me cherches des pous !!!!
Je sais que j'ai melangé du C et du C++...
Quand je disais que du C je parlais de la partie qui permet de modifier la chaine!!!
Et si tu regardes bien j'ai fait une remarque par rapport a la taille de mes tableaux, pour qu'il change les déclarations des variables pour les adapter a son prog...

A++ et bonne prog

Samir
0

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

Posez votre question
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 mai 2004 à 21:35
non je te cherche pas de pous c'est juste que si tu nous montre en c, fait le en c jusqu'au bout, c'est pas dir ta juste a virer iostream.h (qui d'aileur n'est pas standard) et
new char[1000]; par malloc(1000) sans oublier le free qui va avec, sinon ton programme fui, tu voi?
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 mai 2004 à 21:36
et sans oublier le #include <stdlib.h> pour le malloc, c'est important
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 mai 2004 à 21:57
pou n.m. (pl. poux)
0
c2millet Messages postés 198 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 15 février 2005
18 mai 2004 à 09:59
Les poux sont des insectes sans aile aplatis dorso-ventralement. Ils mesurent environ 2 mm de long et sont visibles à l'oeil nu. Ils se transmettent par contact direct entre chats ou par l'intermédiaire des instruments de toilettage (peigne, brosse). Ils vivent en permanence sur leur hôte. Les oeufs, appelés lentes, pondus par la femelle sont déposés à la base des poils et ont l'aspect de petits grains blancs

Cmill
0
borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011
19 mai 2004 à 16:57
borgeomibonjouuuuuuur !!!!!

merci à tous
0
borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011
22 mai 2004 à 10:42
borgeomibonjouuuuuuur !!!!!

NB ==> je suis en train de tester les 2 exemples

Problème ==>

résultat ==> ab; ;b:ab: ;cf; ;

résultat escompté ==> ab; ;b;ab; ;acf; ;
0
borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011
22 mai 2004 à 10:58
borgeomibonjouuuuuuur !!!!!
0
borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011
22 mai 2004 à 11:02
borgeomibonjouuuuuuur !!!!!

Pour Samir

Merci beaucoup de ton aide

Sur ton code un petit problème

exemple

,"salut;;comment;;ca;;va;bien;"

résultat ,"salut; ;comment; ;ca; ;va; ,bien;"

résultat escompté ,"salut; ;comment; ;ca; ;va,bien,"
0
borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011
4 juin 2004 à 10:48
borgeomibonjouuuuuuur !!!!!
0
borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011
4 juin 2004 à 10:48
borgeomibonjouuuuuuur !!!!!
0
borgeomi Messages postés 77 Date d'inscription mercredi 20 juin 2001 Statut Membre Dernière intervention 23 juin 2011
4 juin 2004 à 10:50
borgeomibonjouuuuuuur !!!!!

Volia la solution de mon problème

while( (ind=s.find(";;")) != string::npos )
s.insert(ind+1,r);
s=s+"; ;";

Merci à tous
0
Rejoignez-nous