641 Stimmen

Wie kann man alle Vorkommen eines Zeichens in einer Zeichenfolge ersetzen?

Wie kann man alle Vorkommen eines Zeichens durch ein anderes Zeichen in std::string ?

20voto

Adrià Arrufat Punkte 323

Der Vollständigkeit halber, hier die Vorgehensweise mit std::regex .

#include <regex>
#include <string>

int main()
{
    const std::string s = "example string";
    const std::string r = std::regex_replace(s, std::regex("x"), "y");
}

7voto

Volomike Punkte 22333

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);
}

4voto

Konrad Punkte 37581

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 :-)

4voto

Iván Rodríguez Punkte 417

Alte Schule :-)

std::string str = "H:/recursos/audio/youtube/libre/falta/"; 

for (int i = 0; i < str.size(); i++) {
    if (str[i] == '/') {
        str[i] = '\\';
    }
}

std::cout << str;

Ergebnis:

H:\recursos\audio\youtube\libre\falta\

4voto

hotblack944 Punkte 171

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, {
//                                                {"&", "&amp;"},
//                                                {"<", "&lt;"},
//                                                {">", "&gt;"},
//                                                {"\"", "&quot;"},
//                                                {"'", "&#39;"}});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X