„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie entferne ich führende, nachgestellte und zusätzliche Leerzeichen aus einer Zeichenfolge in C++?

Wie entferne ich führende, nachgestellte und zusätzliche Leerzeichen aus einer Zeichenfolge in C++?

Veröffentlicht am 22.11.2024
Durchsuche:815

How to Remove Leading, Trailing, and Extra Spaces from a String in C  ?

Entfernen führender und nachfolgender Leerzeichen aus einem String in C

Die String-Manipulation in C beinhaltet oft das Entfernen unnötiger Leerzeichen aus Strings. Dies kann besonders nützlich für Aufgaben wie Datenbereinigung oder Textverarbeitung sein.

Entfernen von führenden und nachgestellten Leerzeichen

Um führende und nachgestellte Leerzeichen zu entfernen, kann man find_first_not_of verwenden und find_last_not_of-Methoden. Diese Funktionen finden jeweils das erste und letzte Nicht-Leerzeichen in einer Zeichenfolge. Mit diesen Werten kann man die Teilzeichenfolge erhalten, die die Nicht-Leerzeichen enthält:

std::string trim(const std::string& str, const std::string& whitespace = " \t") {
    const auto strBegin = str.find_first_not_of(whitespace);
    if (strBegin == std::string::npos)
        return ""; // no content

    const auto strEnd = str.find_last_not_of(whitespace);
    const auto strRange = strEnd - strBegin   1;

    return str.substr(strBegin, strRange);
}

Entfernen zusätzlicher Leerzeichen zwischen Wörtern

Um zusätzliche Leerzeichen zwischen Wörtern zu entfernen, ist ein zusätzlicher Schritt erforderlich. Dies kann mithilfe der Methoden find_first_of, find_last_of, find_first_not_of und find_last_not_of zusammen mit substr erreicht werden, um die zusätzlichen Leerzeichen durch ein einzelnes Leerzeichen zu ersetzen:

std::string reduce(const std::string& str, const std::string& fill = " ", const std::string& whitespace = " \t") {
    // trim first
    auto result = trim(str, whitespace);

    // replace sub ranges
    auto beginSpace = result.find_first_of(whitespace);
    while (beginSpace != std::string::npos) {
        const auto endSpace = result.find_first_not_of(whitespace, beginSpace);
        const auto range = endSpace - beginSpace;

        result.replace(beginSpace, range, fill);

        const auto newStart = beginSpace   fill.length();
        beginSpace = result.find_first_of(whitespace, newStart);
    }

    return result;
}

Beispielverwendung

Der folgende Codeausschnitt demonstriert die Verwendung dieser Funktionen:

const std::string foo = "    too much\t   \tspace\t\t\t  ";
const std::string bar = "one\ntwo";

std::cout 

Ausgabe:

[too much               space]
[too much space]
[too-much-space]
[one
two]
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3