1

Connaissez vous une fonction qui remplace une sous chaine par une autre (plus grande) dans une chaine string ?

M%erci d'avance!

2

En C++ : y'a le couple find/replace: http://www.msoe.edu/eecs/ce/courseinfo/stl/string.htm

3

ca m'aide deja pas mal, merci!!!

mais il n'y aurait pas une fonction auquelle on passe comme parametre un string, et deux sous chaines et qui remplacerait la 1ere sous chaine par la seconde ?

4

et comment pourrais je me debrouiller car je vais utiliser getline, qui renvoie un char *, et apres je veux effectuer des modifs (tels que le remplacement dessus...) qui sont faites pour des strings...est il possible de faire une espece de conversion ?

5

string s = getline();
string s1="machainearemplacer";
string s2= "machaineremplacante";
s.replace(s.find(s1,0),s.size(s1), s2);


PS: J'ai jamais utilise les string en C++ !

6

j'ai un fichier makefile a exploiter, cad à enlever les commentaires et les concatenations (ca c facile) mais aussi a remplacer les variables (comprises entre $( et ) )...je vois pas d'autres solutions que prendre le fichier ligne pas ligne et de remplacer si on peut le nom de la variable par sa significion...

qqun aurait une autre methode ?

7

Perl ?

#!/bin/perl
while (<>) {
  s/machainearemplacer/machaineremplacante/;
  s/machainearemplacer2/machaineremplacante2/;
  print;
}

Tu peux aussi faire de façon simple des tableaux associatifs pour remplacer des variables définies dans le prog, etc...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

8

Pollux :
#!/bin/perl


L'emplacement standard est /usr/bin/perl, sinon ça ne marche nulle part.
while (<>) {
  s/machainearemplacer/machaineremplacante/;
  s/machainearemplacer2/machaineremplacante2/;
  print;
}


s/.../.../g. Le 'g' est important, sinon ça ne remplace que la première occurence sur la ligne.
So much code to write, so little time.

9

nitro
:
Pollux :
#!/bin/perl

L'emplacement standard est /usr/bin/perl, sinon ça ne marche nulle part.

Ah OK. Il faut dire que je m'en sers principalement chez moi, et zsh ou Cygwin fait certainement sa petite cuisine avec.
while (<>) {
  s/machainearemplacer/machaineremplacante/;
  s/machainearemplacer2/machaineremplacante2/;
  print;
}

s/.../.../g. Le 'g' est important, sinon ça ne remplace que la première occurence sur la ligne.

Oui, en fait j'ai adapté l'exemple de PpHd qui ne remplaçait qu'une seule occurrence aussi. Mais tu as raison de le préciser smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

10

Ben dans son premier post, il n'etait pas clair qu'il voulait remplacer toutes les occurences.

11

nitro
:
Pollux :
#!/bin/perl

L'emplacement standard est /usr/bin/perl, sinon ça ne marche nulle part.

Sauf là où /usr==/. smile MSYS par exemple.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

12

Pour ta fonction:
[supprimé --- et lis mon dernier message avant d'utiliser une copie sauvegardée bang]
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

13

Oué enfin si c juste pour faire qques substitutions de chaînes de caractères, le C est pas forcément super adapté neutral (pas d'expressions régulières, pas de gestion auto de la mémoire, etc...)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

14

Perso ca aurait ete en perl:
 perl -pi -e 's/orig_str/new_str/g' * **/* **/**/*

tongue

15

il faut absolument que j'utilise du c++ car c un devoir de systeme...

16

Tu peux tjs utiliser une lib qui gère les regexp (par exemple boost, je crois), mais ça peut effectivement passer un peu pour du foutage de gueule tongue

Ou plus simplement :
  string s;
  cin>>s;
#define replace_it(x,y) for (size_type pos;(pos=s.find(x))!=string::npos;s.replace(pos,sizeof(x)-1,y)) (void)0
  replace_it("machaînearemplacer","machaîneremplaçante");
  cout<<s;

(pas testé, mais ça devrait marcher)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

17

et quelle serait la meilleure façon de traiter un fichier texte mot par mot ?

je cherche depuis pas mal de temps une methode efficace et pas trop lourde, mais je n'ai rien trouvé de convaincant...

18

Cherche, c pas compliqué... A priori tu as juste à faire une sorte d'automate fini en distinguant le cas où isalnum(ch) et où !isalnum(ch) smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

19

JiBe
: il faut absolument que j'utilise du c++ car c un devoir de systeme...

En d'autres mots, tu veux qu'on fasse ton devoir pour toi, c'est ça... vtff
J'ai bien fait de mettre la licence avec devoir d'attribution sur mon code. grin Si tu fais passer mon code pour le tien, je te signale qu'en plus d'être en violation des règles anti-triche de ton institution, tu es aussi en violation de mes droits d'auteur. Bref, n'essaye même-pas.
Tes devoirs, tu es censé les faire tout seul.
Bref, va te faire voir, et je ne répondrai plus à aucune question de ta part sur ce topic.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

20

ptdr grin
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

21

KK, Vark> Pas mieux.

Et aussi :
L'emplacement standard est /usr/bin/perl, sinon ça ne marche nulle part.


ou comme ça aussi #!/usr/bin/env perl
si c'est pas un programme trop critique point de vue sécurité (mais ça a pas l'air d'être le cas)

D'ailleurs, je recommanderais plutôt #!/usr/bin/env perl -w tongue