Leerzeichen aus C-Strings entfernen
In C kann das Entfernen von Leerzeichen aus einem String eine häufige Aufgabe sein. Ein naiver Ansatz würde darin bestehen, die Zeichen zu durchlaufen und manuell eine neue Zeichenfolge zu erstellen. Es gibt jedoch eine effizientere Lösung.
Der Algorithmus
Die C-STL stellt einen leistungsstarken Algorithmus namens „remove_if“ bereit, der für diesen Zweck eingesetzt werden kann. Dieser Algorithmus verwendet eine Prädikatsfunktion, die bestimmt, ob ein Element entfernt werden soll, und entfernt dann alle diese Elemente aus dem Container.
In diesem Fall ist die Prädikatsfunktion, an der wir interessiert sind, isspace, die für Leerzeichen „true“ zurückgibt Zeichen und andernfalls false. Durch die Anwendung von „remove_if“ auf eine Zeichenfolge mit dem Prädikat „isspace“ können wir alle Leerzeichen entfernen.
Implementierung
Sobald die Leerzeichen mit „remove_if“ entfernt wurden, müssen wir dies tun Verkleinern Sie die Zeichenfolge auf die neue Größe. Dies kann mit der Löschmethode erreicht werden. Hier ist eine vollständige Implementierung dieses Ansatzes:
#include <algorithm> #include <string> void remove_spaces(std::string& str) { str.erase(std::remove_if(str.begin(), str.end(), std::isspace), str.end()); }
Benutzerdefinierte Implementierung von Remove_if
Der Remove_if-Algorithmus aus der STL ist eine generische Funktion, die auf Container angewendet werden kann jenseits von Saiten. Für bestimmte Anwendungsfälle wie diesen kann es jedoch bequemer sein, eine benutzerdefinierte Version zu implementieren, die auf Zeichenfolgen zugeschnitten ist:
template <typename T> T remove_if(T beg, T end, std::function<bool(char)> pred) { T dest = beg; for (T itr = beg; itr != end; ++itr) { if (!pred(*itr)) { *(dest++) = *itr; } } return dest; }
Diese benutzerdefinierte Implementierung ahmt das Verhalten des STL-Algorithmus „remove_if“ nach und kann verwendet werden speziell für zeichenbasierte Container wie std::string.
Das obige ist der detaillierte Inhalt vonWie kann ich Leerzeichen effizient aus C-Strings entfernen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!