ich Strings in einem String ersetzen wollen, Für zB: die Zeichenfolge aa0_a a1_b b3_c * a0_a, so möchte ich die Teil a0_a mit b1_a ersetzen, aber ich nicht will, dass aa0_a ersetzt wird. Grundsätzlich sollte vor und nach dem Teilstring "a0_a" (zu ersetzendes Zeichen) kein Alphabet vorhanden sein.Teilzeichenfolge Ersetzen innerhalb einer Zeichenkette C++
Antwort
Das ist, was Regexes gut sind. Es existiert in der Standardbibliothek seit C++ 11, wenn Sie eine ältere Version haben, können Sie auch Boost verwenden.
Mit der Standard-Version der Bibliothek, könnten Sie tun (ref):
std::string result;
std::regex rx("([^A-Za-Z])a0_a[^A-Za-Z])");
result = std::regex_replace("aa0_aa1_bb3_c*a0_a", rx, "$1b1_a$2");
(Vorsicht: nicht getestet)
Danke, es funktioniert, nur die Sache ist, dass $ 1 den gesamten RX-Teilstring druckt, während wir nur das erste Zeichen des Teilstrings wollen – user2665673
Die Strings durch Klammern zu trennen tat dies .. ([^ A-Za-z]) (a0_a) .. Regex trennt dies in 2 Teile .. so $ 1 wird nur den ersten Teil nehmen, dh [^ A-Za-z] – user2665673
Einfach genug zu tun, wenn Sie jedes Zeichen durchlaufen. Einige Pseudocode:
Beachten Sie, dass Sie bei der Suche auf die Teilstrings auf Indexierung außerhalb der Grenzen überprüfen müssen.
Ja, das würde für kleine Saiten arbeiten, aber ich würde diese Operation viele Male machen, Iterieren über jedes Zeichen einer Zeichenfolge wird langweilig sein ..... – user2665673
Also, jedes Mal, wenn wir nach dem Teilstring suchen können, dann prüfen Sie das Zeichen an der Position (Index-1), um ein Alphabet zu sein ... gibt es einen schnelleren Weg, wie ich bis jetzt Boost verwendet: : replace_all, möchte eine ähnliche Funktion, die diese Bedingung auch berücksichtigen kann – user2665673
Mögliches Duplikat [Teil einer Zeichenfolge durch eine andere Zeichenfolge ersetzen] (http: // stackoverflow.com/questions/3418231/replace-part-of-a-string-with-another-string) –
Siehe diesen Link http://www.cplusplus.com/reference/string/string/replace/ – Shiv