Heim > Backend-Entwicklung > C++ > Wie entferne ich effizient führende, nachgestellte und zusätzliche Leerzeichen aus einer C-Zeichenfolge?

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

Patricia Arquette
Freigeben: 2024-11-11 17:07:03
Original
460 Leute haben es durchsucht

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

Vor- und nachgestellte Leerzeichen aus einem String in C entfernen

Problem:

Wie geht das? Wir entfernen effizient führende und nachgestellte Leerzeichen aus einem C-String? Wie können wir diesen Vorgang außerdem erweitern, um zusätzliche Leerzeichen zwischen Wörtern in der Zeichenfolge zu entfernen?

Lösung:

Vor- und nachgestellte Leerzeichen entfernen:

  • find_first_not_of(char): Verwenden Sie diese Funktion zum Suchen das erste Zeichen in der Zeichenfolge, das kein Leerzeichen ist.
  • find_last_not_of(char): Verwenden Sie diese Funktion, um das letzte Zeichen in der Zeichenfolge zu finden, das kein Leerzeichen ist.
  • substr(start, length): Verwenden Sie diese Funktion, um die Teilzeichenfolge zwischen dem Startindex und dem angegebenen zu extrahieren Länge.
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

Reduzieren zusätzlicher Leerzeichen:

  • find_first_of(char): Verwenden Sie diese Funktion, um die zu finden erstes Leerzeichen im string.
  • find_first_not_of(char): Verwenden Sie diese Funktion, um das erste Nicht-Leerzeichen nach dem Leerzeichen zu finden.
  • replace(start, length, new_str): Verwenden Sie diese Funktion, um den angegebenen Zeichenbereich durch einen neuen zu ersetzen string.
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

Beispiel:

const std::string foo = "    too much\t   \tspace\t\t\t  ";
const std::string trimmedFoo = trim(foo);
const std::string reducedFoo = reduce(foo);

std::cout << "Original: " << foo << std::endl;
std::cout << "Trimmed: " << trimmedFoo << std::endl;
std::cout << "Reduced: " << reducedFoo << std::endl;
Nach dem Login kopieren

Ausgabe:

Original:     too much        space              
Trimmed: too much space
Reduced: too-much-space
Nach dem Login kopieren

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