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
Patricia ArquetteOriginal
2024-11-11 17:07:03418Durchsuche

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);
}

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;
}

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;

Ausgabe:

Original:     too much        space              
Trimmed: too much space
Reduced: too-much-space

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!

Stellungnahme:
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