Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
921 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Remplacement d'un motif dans une chaine de caractères

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Remplacement d'un motif dans une chaine de caractères

n°2004341
liouan
Posté le 24-06-2010 à 09:13:08  profilanswer
 

Bonjour,
 
Je souhaite trouver une méthode efficace en terme de rapidité pour remplacer un motif apparaissant plusieurs fois dans une chaine de caractères.
ex:
"blabla $tag$ bla bla bla $tag$ $tag$".
->remplacer tous les $tag$ par "toto".
 
Pour l'instant, j'ai fait de cette façon:
 

Code :
  1. std::string replaceAll(std::string& source,const std::string& pattern,const std::string& value)
  2. {
  3.    size_t found;
  4.    while((found=source.find(pattern))!=string::npos)
  5.    {
  6.    source.replace(found,pattern.size(),value);
  7.    }
  8. }


 
Mais ça me paraît hautement inefficace (je re-parse la chaine de caractères en entier à chaque fois)
 
En Java, j'aurai fait un source.split($tag$) et j'aurai ensuite fait un StringBuffer pour reconcaténer en plaçant ma value entre les morceaux, quitte à payer le prix d'une copie à la fin.
 
Vous avez une meilleure solution en C++? Par exemple une méthode toute faite de la librairie STL?

mood
Publicité
Posté le 24-06-2010 à 09:13:08  profilanswer
 

n°2004350
Tarabiscot​e
Posté le 24-06-2010 à 09:30:27  profilanswer
 

Pourquoi tu ne repars pas de found dans ton find ?
 
De tête :

Code :
  1. std::string replaceAll(std::string& source,const std::string& pattern,const std::string& value)
  2. {
  3.    size_t found = 0;
  4.    while((found=source.find(pattern, found))!=string::npos)
  5.    {
  6.       source.replace(found,pattern.size(),value);
  7.       found += value.size();
  8.    }
  9. }


 
PS : Au passage tu peux rajouter a found la taille de la valeur de remplacement pour éviter un remplacement récursif. (rajouté dans le code ci-dessus)


Message édité par Tarabiscote le 24-06-2010 à 09:35:54
n°2004402
liouan
Posté le 24-06-2010 à 11:33:31  profilanswer
 

En fait, oui, je n'y avais juste pas pensé, merci :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Remplacement d'un motif dans une chaine de caractères

 

Sujets relatifs
[C] passage par adresse de chaines de caracteres (résolu)problème convertion d'une chaine en double
Remplacement de valeur en JavascriptExtraction chaîne de caractères
Tester l'encodage des caractèresparcourir une chaine XML. urgent
a propos des jeux en HTML5 ( en remplacement du flash )unicité d'une courbe de HIlbert en 3D a partir du motif initial
Plus de sujets relatifs à : Remplacement d'un motif dans une chaine de caractères


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR