Code pour remplacer du texte par un autre.

Code pour remplacer du texte par un autre. - C++ - Programmation

Marsh Posté le 23-06-2006 à 16:29:49    

Bonjour à tous !!
 
J'ai une petite question : quel est la fonction en C++ permettant de remplacer un texte par un autre ?
 
Exemple : La phrase 1 est la phrase d'origne, la phrase 2 est celle une fois la fonction en question utilisée :
 
Phrase 1 : j'aime les pommes
Phrase 2 : j'aime les légumes
 
Dans notre cas, j'ai remplacé "pommes" par "légumes". En application de la fonction, quel code cela donnerait-il ?
 
Merci d'avance !!


---------------
Si je vous ai aidé, le remerciement le plus simple serait de faire un tour sur mon site web sur les loisirs : http://lvdg.c.la ou sur mon tout nouveau site sur les mangas : www.mangakage.com :)
Reply

Marsh Posté le 23-06-2006 à 16:29:49   

Reply

Marsh Posté le 23-06-2006 à 16:47:36    

Ben je pense qu'il faudrait utiliser STL :
 - tu met tout dans une string
 - tu fait find() pour trouver où il y a "pommes"
 - tu l'efface avec erase()
 - et puis tu fait un insert() pour mettre "légumes"  
 
et puis c'est bon :)

Reply

Marsh Posté le 23-06-2006 à 16:56:16    

plutot replace() a la place de erase() et insert(), c'est plus simple

Reply

Marsh Posté le 23-06-2006 à 16:58:38    

oui t'a sûrement raison  :D

Reply

Marsh Posté le 29-06-2006 à 10:14:57    

Est si t’es un vrais (un vrais je sais pas quoi :| ).
Tu fais :
 

Code :
  1. char texte [] = "j'aime les pommes";
  2. strReplace(texte,"pommes","légumes" );
  3. //avec
  4. //StrReplace par Achoum :)
  5. int strReplace(char *Text,const char *Find,const char *Replace)
  6. {
  7. int Lenght = strlen(Text);
  8. int LenghtFind = strlen(Find);
  9. int LenghtReplace = strlen(Replace);
  10. int NDResult=0;
  11. for(int i=0;i<Lenght-LenghtFind+1;i++)
  12.  {
  13.  for(int j=0;j<LenghtFind;j++)
  14.   if(Text[i+j]!=Find[j]) goto Nop;
  15.   NDResult++;
  16.  if(LenghtFind==LenghtReplace)
  17.   {
  18.   memcpy(&Text[i],Replace,LenghtReplace);
  19.   }
  20.  else if(LenghtFind<LenghtReplace)
  21.   {
  22.   for(int k=Lenght-1;k>=i;k--)
  23.    Text[k + (LenghtReplace-LenghtFind)] = Text[k];
  24.   memcpy(&Text[i],Replace,LenghtReplace);
  25.   }
  26.  else if(LenghtFind>LenghtReplace)
  27.   {
  28.   for(int k=i+LenghtFind;k<Lenght;k++)
  29.     Text[k + (LenghtReplace-LenghtFind)] = Text[k];
  30.    memcpy(&Text[i],Replace,LenghtReplace);
  31.   }
  32.  Text[Lenght + (LenghtReplace - LenghtFind)] = '\0';
  33.  Lenght = strlen(Text);
  34.  LenghtFind = strlen(Find);
  35.  LenghtReplace = strlen(Replace);
  36.  Nop:;
  37.  }
  38. return NDResult;
  39. }


Reply

Marsh Posté le 01-07-2006 à 11:45:38    

Lereveur a écrit :

Est si t’es un vrais (un vrais je sais pas quoi :| ).
Tu fais :
 

Code :
  1. char texte [] = "j'aime les pommes";
  2. strReplace(texte,"pommes","légumes" );
  3. //avec
  4. //StrReplace par Achoum :)
  5. int strReplace(char *Text,const char *Find,const char *Replace)
  6. /// code atroce



 
 
Quelle horreur !!!
Même pour un débutant...
Ca se fait en 7 lignes.


Message édité par marctes le 01-07-2006 à 11:49:03
Reply

Marsh Posté le 02-07-2006 à 21:43:07    

Donc si je met ça j'aurai mon programme :

Code :
  1. //Chargement des librairies
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. int main(int argc, char *argv[])
  6. char texte [] = "j'aime les pommes";
  7. strReplace(texte,"pommes","légumes" );
  8. int strReplace(char *Text,const char *Find,const char *Replace)
  9. {// Début du programme
  10. //On met en place les variables
  11. int Lenght = strlen(Text);
  12. int LenghtFind = strlen(Find);
  13. int LenghtReplace = strlen(Replace);
  14. int NDResult=0; //On initialise la variable à 0
  15. for(int i=0;i<Lenght-LenghtFind+1;i++)
  16. {
  17.  for(int j=0;j<LenghtFind;j++)
  18.  if(Text[i+j]!=Find[j]) goto Nop;
  19.  NDResult++;
  20. if(LenghtFind==LenghtReplace)
  21.  {
  22.   memcpy(&Text[i],Replace,LenghtReplace);
  23.  }
  24. else if(LenghtFind<LenghtReplace)
  25.  {
  26.   for(int k=Lenght-1;k>=i;k--)
  27.   Text[k + (LenghtReplace-LenghtFind)] = Text[k];
  28.   memcpy(&Text[i],Replace,LenghtReplace);
  29.  }
  30. else if(LenghtFind>LenghtReplace)
  31.  {
  32.   for(int k=i+LenghtFind;k<Lenght;k++)
  33.   Text[k + (LenghtReplace-LenghtFind)] = Text[k];
  34.   memcpy(&Text[i],Replace,LenghtReplace);
  35.  }
  36. Text[Lenght + (LenghtReplace - LenghtFind)] = '\0';
  37. Lenght = strlen(Text);
  38. LenghtFind = strlen(Find);
  39. LenghtReplace = strlen(Replace);
  40. Nop:;
  41. }
  42. system("PAUSE" );
  43. return NDResult;
  44. }//Fin du programme


 
C'est bien ça ?


---------------
Si je vous ai aidé, le remerciement le plus simple serait de faire un tour sur mon site web sur les loisirs : http://lvdg.c.la ou sur mon tout nouveau site sur les mangas : www.mangakage.com :)
Reply

Marsh Posté le 03-07-2006 à 08:01:24    

oula non...
déjà faut pas mettre la déclaration de strReplace() dans main()...
tu la met en dehors de main et ensuite tu l'appelle...
 
et puis il vaut mieux pas faire comme ça. Utilise STL : les String, la methode find() et replace()

Reply

Marsh Posté le 03-07-2006 à 13:17:53    

Pourrais-tu me faire un exmeple stp, ça fait un bail que je ne code plus en C++


---------------
Si je vous ai aidé, le remerciement le plus simple serait de faire un tour sur mon site web sur les loisirs : http://lvdg.c.la ou sur mon tout nouveau site sur les mangas : www.mangakage.com :)
Reply

Marsh Posté le 03-07-2006 à 13:58:37    

et voilà en 4 lignes...  :)  
 

Code :
  1. #include<iostream>
  2. #include<string>
  3. int main(int argc, char **argv)
  4. {
  5. std::string s("j'aime pas les pommes" );
  6. int n = s.find("pommes" );
  7. s.replace(n, 6, "fruits" );
  8. std::cout<<s<<std::endl;
  9. return 0;
  10. }


 
ps : si quelqu'un passe par là je me demande est-ce vraiment mauvais d'utiliser toujours endl a la place de "\n". J'ai lu que endl faisait a la fois un "\n" et un flush() et qu'a trop l'utiliser on en perdait l'efficacitée d'utiliser les  buffers... Merci :)


Message édité par Amonchakai le 03-07-2006 à 16:25:36
Reply

Marsh Posté le 03-07-2006 à 13:58:37   

Reply

Marsh Posté le 03-07-2006 à 14:24:40    

En rajoutant une pause à la fin (si on veux voir le texte c'est mieux :) ) ça donnerai donc ça :

Code :
  1. #include<iostream>
  2. #include<string>
  3. int main(int argc, char **argv)
  4. {
  5. std::string s("j'aime pas les pommes" );
  6. int n = s.find("pommes" );
  7. s.replace(n, 6, "fruits" );
  8. std::cout<<s<<std::endl;
  9. system("PAUSE" );
  10. return 0;
  11. }


 
Et ça marche.
 
Le mieux serai même qu'il aille chercher mon fichier texte (dans lequel j'aurai placé mon texte à modifier au préalable) - nous appellerons le fichier texte "texte.txt" que nous metterons à la racine du C - puis qu'il en analyse le contenu, et qu'il remplace les mots que l'on a demandé de remplacer.
 
Cela se présenterai donc comme ceci :
 
- J'ouvre le fichier en lecture+écriture (avec un fopen(); )
- Je charge son contenu en mémoire (avec un fgetc(); )
- Je change ce que je veux dans la mémoire (avec un Boucles, tableaux, conditions... )
- Je réécris le fichier (avec un fputc(); )
 
C'est ça ?


Message édité par Grobs le 03-07-2006 à 15:04:50

---------------
Si je vous ai aidé, le remerciement le plus simple serait de faire un tour sur mon site web sur les loisirs : http://lvdg.c.la ou sur mon tout nouveau site sur les mangas : www.mangakage.com :)
Reply

Marsh Posté le 03-07-2006 à 15:01:41    

je comprend pas bien pourquoi tu dis "je laisse ouvert le fichier" a la fin... mais sinon c'est ça.
il y a plus qu'a...  :jap:

Reply

Marsh Posté le 03-07-2006 à 15:05:02    

EDIT ;)


---------------
Si je vous ai aidé, le remerciement le plus simple serait de faire un tour sur mon site web sur les loisirs : http://lvdg.c.la ou sur mon tout nouveau site sur les mangas : www.mangakage.com :)
Reply

Marsh Posté le 03-07-2006 à 17:22:54    

mmm ...  
 

Code :
  1. char texte [] = "j'aime les pommes";
  2. strReplace(texte,"pommes","légumes" );


 
Ne peut pas marcher car "légumes" à plus de lettres que "pommes".
Il faut donc mettre
 

Code :
  1. char texte [255];
  2. strcpy(texte,"j'aime les pommes" );
  3. strReplace(texte,"pommes","légumes" );


 
(ça évite d'utiliser les strings)


Message édité par Lereveur le 03-07-2006 à 17:24:51
Reply

Marsh Posté le 03-07-2006 à 17:35:34    

Donc ça donnerai ça :

Code :
  1. #include<iostream>
  2. #include<string>
  3. int main(int argc, char **argv)
  4. {
  5.       char texte [255];
  6.       strcpy(texte,"j'aime les pommes" );
  7.       strReplace(texte,"pommes","légumes" );
  8. std::cout<<s<<std::endl;
  9. system("PAUSE" );
  10. return 0;
  11. }


 
Mais ce n'est toujours pas un code me permettant de modifier un fichier texte...


---------------
Si je vous ai aidé, le remerciement le plus simple serait de faire un tour sur mon site web sur les loisirs : http://lvdg.c.la ou sur mon tout nouveau site sur les mangas : www.mangakage.com :)
Reply

Marsh Posté le 03-07-2006 à 22:09:13    

0) Utilise std::string et pas des char* et autres fonctions associées (str* & co)
1) Tu ouvres ton fichier avec std::ifstream
2) Tu copies son contenu dans un std::string
3) Tu utilises les fonctions membres find et replace comme ça a été fait plus haut
 
Va faire un tour du côté des bibliolinks C++ de ce forum.
N'hésite pas à utiliser google !
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed