So entfernen Sie Leerzeichen aus einem Zeichenfolgenobjekt in C ++.
Beispiel: Entfernen von führenden und nachfolgenden Leerzeichen aus dem folgenden Zeichenfolgenobjekt.
//Original string: " This is a sample string "
//Desired string: "This is a sample string"
Die Zeichenfolgenklasse bietet meines Wissens keine Methoden zum Entfernen von führenden und nachfolgenden Leerzeichen.
Um das Problem zu erweitern, können Sie diese Formatierung erweitern, um zusätzliche Leerzeichen zwischen den Wörtern der Zeichenfolge zu verarbeiten. Beispielsweise,
// Original string: " This is a sample string "
// Desired string: "This is a sample string"
Mit den in der Lösung genannten String-Methoden kann ich mir vorstellen, diese Operationen in zwei Schritten auszuführen.
- Entfernen Sie führende und nachfolgende Leerzeichen.
- Verwenden Sie find_first_of, find_last_of, find_first_not_of, find_last_not_of und substr wiederholt an Wortgrenzen, um die gewünschte Formatierung zu erhalten.
site_t
seinsize_t
? Und ich denke, wo Sie den Kommentar haben,no whitespace
bedeutet, dass die Zeichenfolge nur Leerzeichen oder leer ist.size_t
Tippfehler und das Off-by-One in der Bearbeitung behoben , aber nicht bemerkt, dass mein Kommentar invertiert wurde, danke.Einfaches Entfernen von führenden, nachfolgenden und zusätzlichen Leerzeichen aus einem std :: string in einer Zeile
nur führende Leerzeichen entfernen
oder
Entfernen Sie nur nachgestellte Leerzeichen
oder
nur zusätzliche Leerzeichen entfernen
quelle
substr
odererase
).Ich benutze derzeit diese Funktionen:
quelle
Boost String Trim Algorithmus
quelle
Dies ist meine Lösung zum Entfernen der führenden und nachfolgenden Bereiche ...
Das Ergebnis ist "Plamen"
quelle
So können Sie es machen:
Und die unterstützenden Funktionen sind implementiert als:
Und wenn Sie alle diese Funktionen eingerichtet haben, können Sie auch Folgendes schreiben:
Versuche dies
quelle
Beispiel für das Trimmen von führenden und nachfolgenden Leerzeichen gemäß Jon-Hansons Vorschlag, Boost zu verwenden (entfernt nur nachfolgende und ausstehende Leerzeichen):
Ergebnisse in
"t e s t"
Es gibt auch
trim_left
führt zu"t e s t "
trim_right
führt zu" t e s t"
quelle
Im obigen Code ist die Funktion isSpace () eine boolesche Funktion, die angibt, ob ein Zeichen ein Leerzeichen ist. Sie können diese Funktion implementieren, um Ihre Anforderungen widerzuspiegeln, oder einfach isspace () von "ctype.h" aufrufen, wenn Sie möchten .
quelle
Die Verwendung der Standardbibliothek hat viele Vorteile, aber man muss sich einiger Sonderfälle bewusst sein, die Ausnahmen verursachen. Beispielsweise deckte keine der Antworten den Fall ab, in dem eine C ++ - Zeichenfolge einige Unicode-Zeichen enthält. In diesem Fall, wenn Sie die Funktion isspace verwenden eine Ausnahme ausgelöst .
Ich habe den folgenden Code zum Trimmen der Zeichenfolgen und einiger anderer Operationen verwendet, die nützlich sein könnten. Die Hauptvorteile dieses Codes sind: Er ist sehr schnell (schneller als jeder Code, den ich jemals getestet habe), verwendet nur die Standardbibliothek und verursacht niemals eine Ausnahme:
quelle
Beispiel zum Trimmen von führenden und nachfolgenden Leerzeichen
ODER
quelle
Ich habe das getestet, alles funktioniert. Diese Methode processInput fordert den Benutzer lediglich auf, etwas einzugeben. Sie gibt eine Zeichenfolge zurück, die weder intern zusätzliche Leerzeichen noch zusätzliche Leerzeichen am Anfang oder am Ende enthält. Hoffe das hilft. (Geben Sie auch eine Menge Kommentare ein, um das Verständnis zu vereinfachen.)
Sie können sehen, wie Sie es in main () unten implementieren
quelle
Dies könnte die einfachste von allen sein.
Sie können Leerzeichen von beiden Seiten verwenden
string::find
undstring::rfind
finden und die Zeichenfolge reduzieren.quelle
Warum komplizieren?
Dies funktioniert auch dann, wenn der Boost fehlschlagen sollte, kein regulärer Ausdruck, keine seltsamen Dinge oder Bibliotheken.
quelle
quelle
quelle
quelle
Wie wäre es mit: für führende und nachfolgende Räume:
Oder für einen Satz:
quelle
quelle
Nein
boost
, neinregex
, nur diestring
Bibliothek. So einfach ist das.quelle
In C ++ 17
std::basic_string_view
wurde eine Klassenvorlage eingeführt , die sich auf eine konstante zusammenhängende Folge von char-ähnlichen Objekten bezieht, dh auf eine Ansicht der Zeichenfolge. Abgesehen davon, dass es eine sehr ähnliche Oberfläche hat,std::basic_string
verfügt es über zwei zusätzliche Funktionen:remove_prefix()
Die Ansicht wird verkleinert, indem der Start nach vorne verschoben wird. undremove_suffix()
, wodurch die Ansicht verkleinert wird, indem das Ende nach hinten verschoben wird. Diese können verwendet werden, um den vorderen und hinteren Raum zu verkleinern:Hinweis: Das
std::string_view
ist keine Referenz, daher ist es nur gültig, solange die ursprüngliche Zeichenfolge noch vorhanden ist.quelle
Was ist mit der Lösch-Entfernungs-Sprache ?
Es tut uns leid. Ich habe zu spät gesehen, dass Sie nicht alle Leerzeichen entfernen möchten .
quelle
Meine Lösung für dieses Problem, bei dem keine STL-Methoden, sondern nur die eigenen Methoden des C ++ - Strings verwendet werden, lautet wie folgt:
Ich habe diese Methode verwendet, um ein LeetCode-Problem zu übergeben. Wörter in einem String umkehren
quelle
quelle