HOWTO · C++
Leerzeichen aus String in C++ entfernen
Dieser Artikel beschreibt das Entfernen von Leerzeichen aus Zeichenketten in C++
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.