Heim > Backend-Entwicklung > C++ > Hauptteil

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

Linda Hamilton
Freigeben: 2024-11-19 01:21:02
Original
735 Leute haben es durchsucht

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

Vor- und nachgestellte Leerzeichen aus einer Zeichenfolge in C entfernen

Die Zeichenfolgenmanipulation in C beinhaltet häufig das Entfernen unnötiger Leerzeichen aus Zeichenfolgen. 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);
}
Nach dem Login kopieren

Zusätzliche Leerzeichen zwischen Wörtern entfernen

Um zusätzliche Leerzeichen zwischen Wörtern zu entfernen, ein zusätzlicher Schritt ist 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;
}
Nach dem Login kopieren

Beispielverwendung

Der folgende Codeausschnitt demonstriert deren Verwendung Funktionen:

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

std::cout << "[" << trim(foo) << "]" << std::endl;
std::cout << "[" << reduce(foo) << "]" << std::endl;
std::cout << "[" << reduce(foo, "-") << "]" << std::endl;

std::cout << "[" << trim(bar) << "]" << std::endl;
Nach dem Login kopieren

Ausgabe:

[too much               space]
[too much space]
[too-much-space]
[one
two]
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie entferne ich führende, nachfolgende und zusätzliche Leerzeichen aus einer Zeichenfolge in C?. 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