Heim > Backend-Entwicklung > C++ > Wie kann ich Leerzeichen effizient aus C-Strings entfernen?

Wie kann ich Leerzeichen effizient aus C-Strings entfernen?

Barbara Streisand
Freigeben: 2024-12-17 20:07:15
Original
559 Leute haben es durchsucht

How Can I Efficiently Remove Whitespace from C   Strings?

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());
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage