Entfernen von Satzzeichen aus einer Zeichenkette in C++
-
Verwenden Sie die Funktionen
std::erase
undstd::remove_if
, um Interpunktion aus Zeichenketten in C++ zu entfernen - Verwenden einer benutzerdefinierten Funktion zum Entfernen von Interpunktionszeichen aus einer Zeichenkette in C++
- Iterative Methode zum Entfernen von Interpunktionszeichen aus Zeichenketten verwenden in C++
In diesem Artikel werden verschiedene Methoden zum Entfernen von Interpunktion aus einer Zeichenkette in C++ erläutert.
Verwenden Sie die Funktionen std::erase
und std::remove_if
, um Interpunktion aus Zeichenketten in C++ zu entfernen
std::remove_if
ist Teil der STL-Algorithmusbibliothek und kann alle Elemente entfernen, für die die angegebene Bedingung true ergibt. Die Bedingung sollte den Wert bool
für jedes Element im Bereich zurückgeben. In diesem Fall übergeben wir die Funktion ispunct
, um nach Interpunktionssymbolen zu suchen. Beachten Sie, dass std::remove_if
einen Pass-the-End-Iterator für den neuen Wertebereich zurückgibt. Daher verketten wir den Aufruf mit der Methode erase
, die zur analysierten Zeichenkette führt. Diese Lösung funktioniert ähnlich wie die Redewendung Löschen-Entfernen
.
#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. Ut "
"porttitor.";
cout << text << endl;
text.erase(std::remove_if(text.begin(), text.end(), ispunct), text.end());
cout << text << endl;
return EXIT_SUCCESS;
}
Ausgabe:
Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
Verwenden einer benutzerdefinierten Funktion zum Entfernen von Interpunktionszeichen aus einer Zeichenkette in C++
Alternativ kann die vorherige Methode in eine separate Funktion verschoben werden, indem eine lokale Kopie der angegebenen Zeichenkette erstellt und bearbeitet wird, während der analysierte Wert an den Aufrufercode zurückgegeben wird. Diese Funktion kann verwendet werden, um die Funktionalität zu erweitern, um verschiedene Zeichengruppen zu unterstützen, oder um sogar die benutzerdefinierte Prädikatfunktion für den dritten Parameter des Algorithmus remove_if
zu übergeben.
#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_if(tmp.begin(), tmp.end(), ispunct), tmp.end());
return tmp;
}
int main() {
string text =
"Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut "
"porttitor.";
cout << text << endl;
string parsed_text = removeSpaces(text);
cout << parsed_text << endl;
return EXIT_SUCCESS;
}
Ausgabe:
Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
Iterative Methode zum Entfernen von Interpunktionszeichen aus Zeichenketten verwenden in C++
Eine andere Alternative besteht darin, eine separate Funktion zu implementieren, die jedes Zeichen der Zeichenkette durchläuft. Die Funktion nimmt die Zeichenkette als Referenz und verwendet die for
-Schleife, um die Zeichenkette zu durchlaufen. In jeder Iteration wird ispunct
aufgerufen, um zu überprüfen, ob das Zeichen ein Interpunktionssymbol ist oder nicht. Beachten Sie, dass der Variablen len
bei jeder Übereinstimmungsbedingung die Größe der Zeichenkette zugewiesen wird, da das ursprüngliche Zeichenkettenobjekt durch die Funktion erase
geändert wird und die Schleife die Anzahl erneuern muss.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
void removeSpaces2(string& s) {
for (int i = 0, len = s.size(); i < len; i++) {
if (ispunct(s[i])) {
s.erase(i--, 1);
len = s.size();
}
}
}
int main() {
string text =
"Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut "
"porttitor.";
cout << text << endl;
removeSpaces2(text);
cout << text << endl;
return EXIT_SUCCESS;
}
Ausgabe:
Lorem ipsum, dolor sit! amet, consectetur? adipiscing elit. Ut porttitor.
Lorem ipsum dolor sit amet consectetur adipiscing elit Ut porttitor
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 FacebookVerwandter Artikel - C++ String
- Finden Sie das erste sich wiederholende Zeichen in einer Zeichenfolge in C++
- Finden Sie die längste gemeinsame Teilzeichenfolge in C++
- Großschreiben des ersten Buchstabens einer Zeichenfolge in C++
- Vergleich von String und Character in C++
- Entfernen Sie das letzte Zeichen aus einer Zeichenkette in C++
- Abrufen des letzten Zeichens einer Zeichenkette in C++