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 :
- std::string replaceAll(std::string& source,const std::string& pattern,const std::string& value)
- {
- size_t found;
- while((found=source.find(pattern))!=string::npos)
- {
- source.replace(found,pattern.size(),value);
- }
- }
|
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?