Ein getesteter Code mit Beispielen.
Wenn Sie die Zeichenfolge zurückgegeben werden soll verwenden:
std::string ReplaceString(std::string subject, const std::string& search,
const std::string& replace) {
size_t pos = 0;
while ((pos = subject.find(search, pos)) != std::string::npos) {
subject.replace(pos, search.length(), replace);
pos += replace.length();
}
return subject;
}
Wenn Sie Leistung benötigen, ist hier eine optimierte Funktion, die die Eingabezeichenfolge ändert, ist es nicht eine Kopie der Zeichenfolge zu erstellen:
void ReplaceStringInPlace(std::string& subject, const std::string& search,
const std::string& replace) {
size_t pos = 0;
while ((pos = subject.find(search, pos)) != std::string::npos) {
subject.replace(pos, search.length(), replace);
pos += replace.length();
}
}
Tests:
std::string input = "abc abc def";
std::cout << "Input string: " << input << std::endl;
std::cout << "ReplaceString() return value: "
<< ReplaceString(input, "bc", "!!") << std::endl;
std::cout << "ReplaceString() input string not changed: "
<< input << std::endl;
ReplaceStringInPlace(input, "bc", "??");
std::cout << "ReplaceStringInPlace() input string modified: "
<< input << std::endl;
Ausgang:
Könnten Sie bitte erklären, wie Ihr Code funktioniert? danke :) –
Kommentare hinzugefügt. –
Es ist ein kleiner Nit zu wählen, aber Ihr Funktionsname hat einen Tippfehler ("Repalce"), der in Ihrem sehr eleganten und gut formatierten Code etwas fehl am Platz erscheint. –