Heim > Backend-Entwicklung > C++ > Wie schneide ich führende und nachfolgende Leerzeichen aus einer Zeichenfolge in C ab?

Wie schneide ich führende und nachfolgende Leerzeichen aus einer Zeichenfolge in C ab?

Mary-Kate Olsen
Freigeben: 2024-11-19 09:28:03
Original
391 Leute haben es durchsucht

How to Trim Leading and Trailing Spaces from a String in C  ?

Führende und nachgestellte Leerzeichen aus einem String entfernen

Das Entfernen von führenden und nachgestellten Leerzeichen aus einem String-Objekt in C ist eine häufige Aufgabe. Der String-Klasse fehlen native Methoden, um dies zu erreichen, aber es kann durch eine Kombination von String-Manipulationstechniken erreicht werden.

Um führende und nachgestellte Leerzeichen zu entfernen, können die Funktionen find_first_not_of und find_last_not_of verwendet werden, um den ersten und den letzten zu identifizieren Nicht-Leerzeichen in der Zeichenfolge. Sobald diese Positionen bestimmt sind, kann die Funktion substr verwendet werden, um die Teilzeichenfolge ohne führende und nachfolgende Leerzeichen zu extrahieren.

#include <string>

std::string trim(const std::string& str) {
    const auto strBegin = str.find_first_not_of(" ");
    if (strBegin == std::string::npos) {
        return "";
    }
    const auto strEnd = str.find_last_not_of(" ");
    const auto strRange = strEnd - strBegin + 1;
    return str.substr(strBegin, strRange);
}
Nach dem Login kopieren

Erweitern der Formatierung zur Reduzierung zusätzlicher Leerzeichen

Um zusätzliche Leerzeichen zwischen Wörtern in einer Zeichenfolge zu entfernen, ist ein umfassenderer Ansatz erforderlich. Dies kann durch wiederholte Verwendung der Funktionen find_first_of, find_last_not_of und substr erreicht werden, um Unterbereiche von Leerzeichen durch ein Platzhalterzeichen oder eine Platzhalterzeichenfolge zu ersetzen.

std::string reduce(const std::string& str, const std::string& fill = " ") {
    auto result = trim(str);
    auto beginSpace = result.find_first_of(" ");
    while (beginSpace != std::string::npos) {
        const auto endSpace = result.find_first_not_of(" ", beginSpace);
        const auto range = endSpace - beginSpace;
        result.replace(beginSpace, range, fill);
        const auto newStart = beginSpace + fill.length();
        beginSpace = result.find_first_of(" ", newStart);
    }
    return result;
}
Nach dem Login kopieren

Verwendungsbeispiel

Der folgende Codeausschnitt zeigt, wie diese Funktionen verwendet werden:

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

Dieser Code erzeugt die folgende Ausgabe:

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

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