Zeichenkette in C++ löschen

Jinku Hu 12 Oktober 2023
Zeichenkette in C++ löschen

Dieser Artikel zeigt, wie Sie mit der Funktion std::string::erase ein Zeichen aus einer Zeichenkette in C++ entfernen.

Verwenden Sie die Funktion std::string::erase, um bestimmte Zeichen im String zu entfernen

erase ist eine std::string-Memberfunktion, die verwendet werden kann, um die angegebenen Zeichen aus der Zeichenkette zu entfernen. Es hat drei Überladungen, von denen jede in den folgenden Beispielen diskutiert wird.

Die erste Überladung akzeptiert zwei Argumente vom Typ size_type, die den index und den count bezeichnen. Diese Version versucht, die Anzahl der Zeichen count ab der Position index zu löschen, aber in einigen Szenarien können nach dem angegebenen Index weniger Zeichen übrig sein, daher soll die Funktion min(count, size() - index) Zeichen. Die erste Überladung von erase gibt den Wert *this zurück.

Beide Parameter haben Standardwerte, und wenn wir einen einzelnen Argumentwert an die Funktion übergeben, kann das Ergebnis etwas kontraintuitiv sein. Tatsächlich wird der angegebene Wert als index-Parameter interpretiert und der count wird als std::npos angenommen. Folglich führt dies dazu, dass der Rest der Zeichenkette nach der angegebenen Position gelöscht wird.

Der folgende Codeausschnitt zeigt ähnliche Szenarien – eines mit find-Elementfunktionen und das andere – durch explizite Übergabe des Indexwerts.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";

  text.erase(0, 6);
  cout << text << endl;

  text.erase(text.find('c'));
  cout << text << endl;

  text.erase(2);
  cout << text << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

ipsum dolor sit amet, consectetur adipiscing elit.
ipsum dolor sit amet,
ip

Die zweite Überladung der Funktion akzeptiert einen einzelnen Parameter, der die Position des zu löschenden Zeichens darstellt. Dieses Argument sollte der entsprechende Iteratortyp sein; Andernfalls wird die erste Überladung aufgerufen. Wir können diese Version der Funktion zusammen mit dem std::find-Algorithmus verwenden, um das erste Vorkommen des angegebenen Zeichens aus der Zeichenkette zu entfernen. Andernfalls können wir die relative Position des Zeichens mit den Iteratoren begin oder end übergeben.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";

  text.erase(std::find(text.begin(), text.end(), ','));
  cout << text << endl;

  text.erase(text.end() - 5);
  cout << text << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Lorem ipsum dolor sit amet consectetur adipiscing elit.
Lorem ipsum dolor sit amet consectetur adipiscing lit.

Schließlich haben wir die dritte Überladung, die zwei Iteratoren als Parameter verwendet und alle Zeichen im entsprechenden Bereich entfernt. Das folgende Codebeispiel zeigt, wie wir alle Zeichen in der Zeichenkette mit Ausnahme des ersten entfernen können.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";

  text.erase(text.begin() + 1, text.end());
  cout << text << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

L
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ String