Wie kann man alle Vorkommen eines Zeichens durch ein anderes Zeichen in std::string
?
Antworten
Zu viele Anzeigen?Wenn Sie mehr als ein einzelnes Zeichen ersetzen wollen und nur mit std::string
dann würde dieser Ausschnitt funktionieren, indem sNeedle in sHaystack durch sReplace ersetzt wird, wobei sNeedle und sReplace nicht die gleiche Größe haben müssen. Diese Routine verwendet die while-Schleife, um alle Vorkommen zu ersetzen und nicht nur das erste, das von links nach rechts gefunden wird.
while(sHaystack.find(sNeedle) != std::string::npos) {
sHaystack.replace(sHaystack.find(sNeedle),sNeedle.size(),sReplace);
}
Wie Kirill vorschlug, verwenden Sie entweder die replace-Methode oder iterieren Sie entlang der Zeichenkette und ersetzen jedes einzelne Zeichen.
Alternativ können Sie auch die find
Methode oder find_first_of
je nachdem, was Sie tun müssen. Keine dieser Lösungen wird die Aufgabe auf Anhieb erledigen, aber mit ein paar zusätzlichen Zeilen Code sollten Sie sie für sich arbeiten lassen :-)
Was ist mit Abseilen StrReplaceAll ? Aus der Header-Datei:
// This file defines `absl::StrReplaceAll()`, a general-purpose string
// replacement function designed for large, arbitrary text substitutions,
// especially on strings which you are receiving from some other system for
// further processing (e.g. processing regular expressions, escaping HTML
// entities, etc.). `StrReplaceAll` is designed to be efficient even when only
// one substitution is being performed, or when substitution is rare.
//
// If the string being modified is known at compile-time, and the substitutions
// vary, `absl::Substitute()` may be a better choice.
//
// Example:
//
// std::string html_escaped = absl::StrReplaceAll(user_input, {
// {"&", "&"},
// {"<", "<"},
// {">", ">"},
// {"\"", """},
// {"'", "'"}});