269 votes

Remplacer une partie d’une chaîne par une autre chaîne

Est-ce possible en C++ pour remplacer une partie d’une chaîne par une autre chaîne. Fondamentalement, je tiens à le faire

mais je voudrais utiliser les bibliothèques C++ Standard.

376voto

Michael Mrozek Points 44120

Il y a une fonction pour rechercher une sous-chaîne dans une chaîne de caractères (find), et une fonction pour remplacer une gamme donnée dans une chaîne par une autre chaîne (replace), de sorte que vous pouvez combiner pour obtenir l'effet que vous voulez:

bool replace(std::string& str, const std::string& from, const std::string& to) {
    size_t start_pos = str.find(from);
    if(start_pos == std::string::npos)
        return false;
    str.replace(start_pos, from.length(), to);
    return true;
}

std::string string("hello $name");
replace(string, "$name", "Somename");

En réponse à un commentaire, je pense que replaceAll serait probablement ressembler à quelque chose comme ceci:

void replaceAll(std::string& str, const std::string& from, const std::string& to) {
    if(from.empty())
        return;
    size_t start_pos = 0;
    while((start_pos = str.find(from, start_pos)) != std::string::npos) {
        str.replace(start_pos, from.length(), to);
        start_pos += to.length(); // In case 'to' contains 'from', like replacing 'x' with 'yx'
    }
}

42voto

S.C. Madsen Points 2342

a une [ ](http://www.cplusplus.com/reference/string/string/replace/) méthode, qui est ce que vous cherchez ?

Vous pouvez essayer :

Je n’ai pas essayé moi-même, il suffit de lire la documentation sur et .

13voto

Czarek Tomczak Points 4551

Pour que la nouvelle chaîne retournée Utilisez ceci :

Si vous avez besoin de performances, voici une fonction optimisée qui modifie la chaîne d’entrée, il ne crée pas une copie de la chaîne :

Essais :

Sortie :

6voto

Galik Points 522

Généralement, j’utilise ceci :

Il appelle à plusieurs reprises pour trouver des autres occurrences de la recherché pour chaîne jusqu’au ne trouve rien. Parce que `` retourne la position du match nous n’avons pas le problème d’invalider les itérateurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X