Heim  >  Artikel  >  Backend-Entwicklung  >  Wie entferne ich führende und nachgestellte Leerzeichen und reduziere mehrere Leerzeichen auf einzelne Leerzeichen in einer C-Zeichenfolge?

Wie entferne ich führende und nachgestellte Leerzeichen und reduziere mehrere Leerzeichen auf einzelne Leerzeichen in einer C-Zeichenfolge?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-13 07:07:02246Durchsuche

How do I remove leading and trailing spaces, and reduce multiple spaces to single spaces in a C   string?

Vor- und nachgestellte Leerzeichen aus einem String in C entfernen

Diese Aufgabe, die allgemein als String-Trimmen bekannt ist, kann mit der String-Klasse von C durchgeführt werden. Um potenzielle zusätzliche Leerzeichen zwischen Wörtern zu beseitigen, wird eine separate Operation namens String-Reduktion eingesetzt.

Führende und nachfolgende Leerzeichen kürzen

Um führende und nachfolgende Leerzeichen zu entfernen, kann die Funktion trim() mithilfe von definiert werden die Methoden find_first_not_of und find_last_not_of:

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

String-Reduktion

Um zusätzliche Leerzeichen zwischen Wörtern zu entfernen, führt die Funktion Reduce() die folgenden Operationen aus:

  1. Trimmt die Zeichenfolge mithilfe der Funktion trim().
  2. Ersetzt aufeinanderfolgende Leerzeichen durch ein einzelnes Leerzeichen mithilfe von find_first_of, find_first_not_of und replacement.
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;
}

Verwendung

Die Der folgende Code demonstriert die Verwendung der Funktionen trim() und Reduce():

int main(void)
{
    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;
}

Ausgabe

[too much               space]
[too much space]
[too-much-space]
[one
two]

Das obige ist der detaillierte Inhalt vonWie entferne ich führende und nachgestellte Leerzeichen und reduziere mehrere Leerzeichen auf einzelne Leerzeichen in 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