Gibt es eine Möglichkeit, alle Vorkommen eines Teilstrings durch einen anderen String in zu ersetzen std::string
?
Zum Beispiel:
void SomeFunction(std::string& str)
{
str = str.replace("hello", "world"); //< I'm looking for something nice like this
}
Antworten:
Warum implementieren Sie nicht Ihren eigenen Ersatz?
quelle
Hier ist die offizielle Dokumentation zu replace_all.
quelle
replace_all
wird für Versionen von Boost> 1.43 in Sun Studio für jede Version <12.3boost
erhöht die Kompilierungszeit auf eingebetteten Geräten erheblich. Sogar ARMv7 Quad Core. 100 Codezeilen werden in 2 Minuten kompiliert, ohne Boost, 2 Sekunden.In C ++ 11 können Sie dies als Einzeiler mit einem Aufruf an
regex_replace
:Ausgabe:
quelle
from
dies ein regulärer Ausdruck sein kann. Sie können daher bei Bedarf komplexere Übereinstimmungskriterien verwenden. Was ich nicht sehe, ist, wie man dies macht, ohne irgendeine Form der Analyse regulärer Ausdrücke anzuwenden - stattdessen nur eine direkte Interpretation derfrom
Zeichen zu verwenden.Warum nicht eine geänderte Zeichenfolge zurückgeben?
Wenn Sie Leistung benötigen, finden Sie hier eine optimierte Funktion, mit der die Eingabezeichenfolge geändert und keine Kopie der Zeichenfolge erstellt wird:
Tests:
Ausgabe:
quelle
Mein templatisiertes Inline-In-Place-Suchen und Ersetzen:
Es wird die Anzahl der ersetzten Elemente zurückgegeben (zur Verwendung, wenn Sie dies nacheinander ausführen möchten usw.). Um es zu benutzen:
quelle
Der einfachste Weg (etwas in der Nähe von dem anzubieten, was Sie geschrieben haben) ist die Verwendung von Boost.Regex , insbesondere von regex_replace .
std :: string hat die Methoden find () und replace () integriert, die Arbeit mit ihnen ist jedoch umständlicher, da sie den Umgang mit Indizes und Zeichenfolgenlängen erfordern.
quelle
Ich glaube das würde funktionieren. Es werden const char * als Parameter verwendet.
quelle
size_type
für eine Zeichenfolge istunsigned
Ihre>=
Überprüfung in der Schleifenbedingung immertrue
. Sie müssenstd::string::npos
dort verwenden.roll_down_window
quelle
Die Überprüfung, ob oldStr leer ist, ist wichtig. Wenn dieser Parameter aus irgendeinem Grund leer ist, bleiben Sie in einer Endlosschleife stecken.
Aber ja, verwenden Sie die bewährte C ++ 11- oder Boost-Lösung, wenn Sie können.
quelle