J'ai passé la dernière heure et demie en essayant de déterminer comment exécuter une recherche simple et remplacer sur un objet code> string code> en C ++.
J'ai trois objets de chaîne. p> Je veux exécuter une commande de recherche sur NB: strong> réponses à Pure C ++ uniquement. L'environnement est Xcode sur le Mac OSX Leopard. P> P> original code> pour le Search_val code> et remplacer toutes les occurrences avec remplaforme_val Code>. P>
9 Réponses :
size_t start = 0;
while(1) {
size_t where = original.find(search_val, start);
if(where==npos) {
break;
}
original.replace(where, search_val.size(), replace_val);
start = where + replace_val.size();
}
Une boucle doit fonctionner avec Rechercher et remplacer
void searchAndReplace(std::string& value, std::string const& search,std::string const& replace)
{
std::string::size_type next;
for(next = value.find(search); // Try and find the first match
next != std::string::npos; // next is npos if nothing was found
next = value.find(search,next) // search for the next match starting after
// the last match that was found.
)
{
// Inside the loop. So we found a match.
value.replace(next,search.length(),replace); // Do the replacement.
next += replace.length(); // Move to just after the replace
// This is the point were we start
// the next search from.
}
}
C'est un petit nit à choisir, mais votre nom de fonction a une faute de frappe ("repalce") qui semble un peu hors de place dans votre code, très élégant et bien formaté, code.
@Levy: On ne peut que s'efforcer de la perfection, mais l'atteinte est le domaine des divinités (donc si ma seule erreur est l'orthographe que je suis heureux).
Je suis d'accord c'est un élément élégant de code. Ma seule recommandation est de ne pas utiliser de verbes pour vos paramètres / variables car ils ressemblent à un nom de la fonction (Remplacer Même est un nom de la fonction). Donc votre appel remplacé () pourrait lire quelque chose comme cible.replace (suivant, Search_string.length (), remplacement)
Pour la comparaison Voici la fonction de Pure C: http://www.pixelbeat.org/libs/string_replace.c P >
Qu'est-ce que la phrase "interpolation de chaîne" signifie? Je l'ai trouvé dans l'en-tête du lien que vous avez fourni.
Si vous recherchez «Interpoler», vous devriez obtenir une description. Par exemple, l'interpolation variable de Shell est le processus de remplacement du nom de $ avec "valeur".
Un peu plus élégant:
mais limité à remplacer un seul caractère unique !! strong> p>
boost::replace_all(original, search_val, replace_val);
Cela pourrait entraîner une exécution plus rapide et préserve l'original si vous le souhaitez.
static std::string strreplace( const std::string &original, const std::string &pattern, const std::string &newtext ) {
std::stringstream ss;
std::string::size_type last = 0;
std::string::size_type it = original.find( pattern, last );
while( it != original.npos ) {
if( it-last > 0 ) {
ss << original.substr( last, it - last );
ss << newtext;
}
last = it + pattern.size( );
it = original.find( pattern, last );
}
return ss.str( );
Ceci est probablement votre version la plus concentrée de chaîne remplacer:
Code testé avec des exemples.
Si vous souhaitez que la chaîne renvoyée utilisez ceci: p> Si vous avez besoin de performances, une fonction optimisée qui modifie l'entrée. String, il ne crée pas une copie de la chaîne: p> tests: p> sortie: p>