Leerzeichen aus String in C++ entfernen

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die Redewendung Löschen-Entfernen, um Leerzeichen aus Zeichenketten in C++ zu entfernen
  2. Verwenden einer benutzerdefinierten Funktion zum Entfernen von Leerzeichen aus einer Zeichenkette in C++
Leerzeichen aus String in C++ entfernen

Dieser Artikel zeigt verschiedene Methoden zum Entfernen von Leerzeichen aus einer Zeichenkette in C++.

Verwenden Sie die Redewendung Löschen-Entfernen, um Leerzeichen aus Zeichenketten in C++ zu entfernen

Eine der nützlichsten Methoden zur Bereichsmanipulation in C++ ist das Lösch-Entfernen-Idiom, das aus zwei Funktionen besteht: std::erase (integrierte Funktion für die meisten STL-Container) und std::remove (Teil der STL-Algorithmusbibliothek). Beachten Sie, dass beide verkettet sind, um den Entfernungsvorgang für das angegebene Objekt durchzuführen. Die Funktion std::remove benötigt zwei Iteratoren, um den Bereich anzugeben, und das dritte Argument, um den zu entfernenden Wert des Elements anzugeben. In diesem Fall geben wir direkt ein Leerzeichen an, aber jedes Zeichen kann angegeben werden, um alle seine Vorkommen in der Zeichenkette zu entfernen.

#include <iostream>
#include <string>

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

int main() {
  string str = "  Arbitrary   str ing with lots of spaces to be removed   .";

  cout << str << endl;

  str.erase(std::remove(str.begin(), str.end(), ' '), str.end());

  cout << str << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Arbitrary   str ing with lots of spaces to be removed   .
Arbitrarystringwithlotsofspacestoberemoved.

Andererseits kann der Benutzer auch ein unäres Prädikat als drittes Argument an den Algorithmus std::remove übergeben. Das Prädikat sollte für jedes Element den Wert bool ergeben. Wenn das Ergebnis true ist, werden die entsprechenden Werte aus dem Bereich entfernt. Daher können wir eine vordefinierte isspace-Funktion verwenden, die nach mehreren Leerzeichen wie Leerzeichen - " ", Zeilenumbruch - \n, horizontaler Registerkarte - \t und mehreren anderen sucht.

#include <iostream>
#include <string>

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

int main() {
  string str = "  Arbitrary   str ing with lots of spaces to be removed   .";

  cout << str << endl;

  str.erase(std::remove_if(str.begin(), str.end(), isspace), str.end());

  cout << str << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Arbitrary   str ing with lots of spaces to be removed   .
Arbitrarystringwithlotsofspacestoberemoved.

Verwenden einer benutzerdefinierten Funktion zum Entfernen von Leerzeichen aus einer Zeichenkette in C++

Beachten Sie, dass alle vorherigen Lösungen das ursprüngliche Zeichenkettenobjekt geändert haben. Manchmal muss jedoch eine neue Zeichenkette erstellt werden, bei der alle Leerzeichen entfernt werden. Wir können eine benutzerdefinierte Funktion mit demselben Idiom Löschen-Entfernen implementieren, das die Zeichenkettenreferenz verwendet und einen analysierten Wert zurückgibt, der in einem separaten Zeichenkettenobjekt gespeichert werden soll. Diese Methode kann auch geändert werden, um einen anderen Funktionsparameter zu unterstützen, der das zu entfernende Zeichen angibt.

#include <iostream>
#include <string>

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

string removeSpaces(const string& s) {
  string tmp(s);
  tmp.erase(std::remove(tmp.begin(), tmp.end(), ' '), tmp.end());
  return tmp;
}

int main() {
  string str = "  Arbitrary   str ing with lots of spaces to be removed   .";

  cout << str << endl;

  string newstr = removeSpaces(str);

  cout << newstr << endl;

  return EXIT_SUCCESS;
}

Ausgabe:

Arbitrary   str ing with lots of spaces to be removed   .
Arbitrarystringwithlotsofspacestoberemoved.
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