C ++ String Trim -Methoden

C ++ String Trim -Methoden
Das Trimmen einer Schnur bedeutet, weiße Räume vor und hinter der Schnur zu entfernen. Die nächste Frage ist, was sind weiße Räume? Das Folgende ist eine Liste von weißen Räumen in einer Saite:
  • "oder '\ 040': Platz durch Drücken der Leertaste -Taste
  • '\ n': Linienfutter
  • '\ r': Kutschenrendite
  • 'f': Form Feed
  • '\ t': Horizontale Registerkarte
  • '\ v': vertikale Registerkarte

C ++ hat keine Funktion zum Trimmen einer Zeichenfolge. Es gibt ein Thema in der Computerprogrammierung genannt, reguläre Ausdrücke, abgekürzte Regex. Dieses Thema verfügt über Schemata, mit denen der Programmierer nach einem Unterstring in einer Zielzeichenfolge suchen und die gefundene Unterstring ersetzen kann. Die gefundene Unterlader kann durch nichts ersetzt werden, und so löschen Sie sie.

Mit dem Such-und-Replace mit nichts Idee kann eine Zeichenfolge geschnitten werden. Suchen Sie also nach allen weißen Space-Zeichen vor der Saite und allen weißen Raumzeichen hinter der Saite und ersetzen Sie sie durch nichts. Zum Glück hat C ++ eine Regex -Bibliothek, die in das Programm aufgenommen werden muss, um dies zu tun.

Artikelinhalt

  • Einführung - siehe oben
  • Zusammenfassung der regulären Ausdrücke
  • Suchen und ersetzen
  • Richtig trimmen
  • Abschluss

Zusammenfassung der regulären Ausdrücke

Regex
Betrachten Sie die Zeichenfolge:

"Das ist es für die Show"

Die ersten vier Zeichen dieser Zeichenfolge bilden die Unterstring, "das". Die letzten vier Zeichen der Zeichenfolge bilden die letzte Unterstring, "Show".

Jetzt wird die gesamte Zeichenfolge als Zielzeichenfolge oder einfach Ziel bezeichnet. Die Sub-String "This" oder "Show" wird als regulärer Ausdruck genannt oder einfach Regex.

Matching
Wenn „dies“ nach dem Ziel gesucht und befindet, soll das Matching aufgetreten sein. Wenn "Show" gesucht und gefunden wird, soll das Matching immer noch aufgetreten sein. Die Übereinstimmung tritt für eine Zielzeichenfolge auf, wenn eine Unterstring gefunden wird. Die Unterstring kann ersetzt werden. Zum Beispiel kann „dies“ durch „Here“ ersetzt werden und „Show“ kann durch „Spiel“ ersetzt werden, um das neue Ziel zu haben,

"Hier ist es für das Spiel"

Wenn die ersten und letzten Worte überhaupt nicht gesucht würden, könnten sie durch nichts ersetzt werden, um zu haben,

"Ist es für die"

Dieses letzte Ergebnis ist ein unkonventionelles Trimmen, das am Anfang leider mit einem Raum endet.

Muster
Ein stumpfes Unterstring („This“ oder „Show“) ist, wie oben dargestellt, ein einfaches Muster. Betrachten Sie das folgende Ziel:

"Hey, das ist ein Schläger mitten auf der Straße."

Der Programmierer möchte vielleicht wissen, ob es sich um eine Ratte, eine Katze oder eine Fledermaus handelt, da diese drei Wörter im Klang ähnlich sind. Er braucht ein Muster, um das Wort "Katze" oder "Ratte" oder "Fledermaus" zu identifizieren. Beachten Sie, dass jedes dieser Worte mit „at“ endet, aber mit 'B' oder 'C' oder 'R' beginnt,. Das Muster, um einem dieser drei Wörter zu entsprechen, ist

[BCR] bei

Dies bedeutet, dass Sie 'B' oder 'C' oder 'R' übereinstimmen, gefolgt von "at".

Wiederholung
x*: bedeutet Match 'x' 0 oder mehrmals, ich.e., beliebig viele Male.

Passende Beispiele
Das folgende Programm erzeugt eine Übereinstimmung mit „Fledermaus“ in der Zielzeichenfolge unter Verwendung des Regex -Objekts Reg („[BCR] at“), dessen Muster [BCR] at ist.

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

regex reg ("[bcr] at");
if (regex_search ("Hey, das ist eine Fledermaus in der Mitte der Straße.", Reg))
Cout << "matched" << endl;
anders
Cout << "not matched" << endl;
Rückkehr 0;

Die Ausgabe ist: angepasst.

Die Regex -Bibliothek ist in "#include" enthalten. Das Regex -Objekt wird mit der Anweisung instanziiert,

regex reg ("[bcr] at");

[/cc]

Die Funktion regex_search () aus der Bibliothek nimmt hier zwei Argumente auf. Der erste ist die Zielzeichenfolge. Das zweite ist das Regex -Objekt. Das Muster [BCR] bei übereinstimmender „Fledermaus“ und so gab die Funktion regex_search () true zurück. Andernfalls wäre es zurückgekehrt, falsch.

Das folgende Programm zeigt eine Übereinstimmung mit dem Muster, Bo*K für „Buch“:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

regex reg ("bo*k");
if (regex_search ("Das Buch ist gut.", Reg))
Cout << "matched" << endl;
anders
Cout << "not matched" << endl;
Rückkehr 0;

Die Ausgabe ist: angepasst. o* bedeutet, über 'o', Null oder mehrmals zu stimmen. Es passte tatsächlich zu 'o', zweimal in „Buch“.

Übereinstimmender Beginn der Zielzeichenfolge
Um den Beginn einer Zielzeichenfolge zu entsprechen, hat das Muster zunächst mit ^ ^ . Das folgende Programm entspricht dem Beginn der Zielzeichenfolge "Dies ist es für die Show".

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

regex reg ("^this");
if (regex_search ("Dies ist es für die Show", Reg)))
Cout << "matched" << endl;
anders
Cout << "not matched" << endl;
Rückkehr 0;

Die Ausgabe ist: angepasst. Beachten Sie die Regex buchstäblich, "^this" .

Passendes Ende der Zielzeichenfolge
Um das Ende einer Zielzeichenfolge zu erreichen, muss das Muster mit $ enden. Das folgende Programm entspricht "Show" am Ende der Zielzeichenfolge: "Das ist es für die Show".

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Regex Reg ("Show $");
if (regex_search ("Dies ist es für die Show", Reg)))
Cout << "matched" << endl;
anders
Cout << "not matched" << endl;
Rückkehr 0;

Die Ausgabe ist: angepasst. Beachten Sie die Regex buchstäblich "Show $" .

Passende Alternativen
Um die Anfangs-STRING oder die Sub-String-End-String abzustimmen, ist die | Metabarakter muss die Anfänger- und Endmuster im Gesamtmuster trennen. Das folgende Programm zeigt dies:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

regex reg ("^this | show $");
if (regex_search ("Dies ist es für die Show", Reg)))
Cout << "matched" << endl;
anders
Cout << "not matched" << endl;
Rückkehr 0;

Die Ausgabe ist: angepasst. Beachten Sie die Regex buchstäblich "^this | Show $" .

Jetzt übereinstimmt die Funktion regex_search () typischerweise mit der ersten Musteroption und stoppt. Dieser Fall entspricht „This“ zu Beginn des Ziels und hört auf, ohne weiterhin „Show“ am Ende des Ziels zu erreichen.

Glücklicherweise ersetzt die Funktion regex_replace () der C ++ Regex -Bibliothek alle Alternativen in der Zielzeichenfolge im Standardmodus. Und so ist diese Funktion regex_replace () zum Schneiden von Zeichenfolgen geeignet. Das heißt, suchen Sie nach dem gesamten weißen Raum vor der Saite und suchen Sie nach dem gesamten weißen Raum hinter der Saite und ersetzen Sie beide durch nichts.

Suchen und ersetzen

Das folgende Programm ersetzt die ersten und letzten Wörter der Zielzeichenfolge durch das Wort „Hund“:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

char str [] = "Dies ist es für die Show";
String NewStr = Regex_Replace (str, regex ("^this | show $"), "Hund");
Cout << newStr << endl;
Rückkehr 0;

Die Ausgabe ist:

Hund ist es für den Hund

Das Programm verwendet die Funktion regex_replace (). Das erste Argument ist die Zielzeichenfolge. Das zweite Argument ist das Regex -Objekt. Das dritte Argument ist das ersetzende String -Literal. Die Rückgabezeichenfolge ist das modifizierte String -Objekt. Die Stringklasse musste also enthalten sein.

Richtig trimmen

Betrachten Sie die Zeichenfolge:

"\ T Ich will Demokratie! \N"

Zwei weiße Raumzeichen, '\ t' und ", stehen vor dem nützlichen Text. Zwei weitere weißen Raumzeichen "und '\ t' stehen hinter dem nützlichen Text. Trimmen bedeutet, alle weißen Raumfiguren vor dem Text zu entfernen und alle weißen Space-Zeichen hinter dem Text zu entfernen.

Um den ersten beiden Zeichen hier zu entsprechen, lautet das Muster „\ t | „, Das ist '\ t' oder ein Raum. Um den letzten beiden Zeichen hier zu entsprechen, ist das Muster "| \ t", dh ein Raum oder '\ t'. Der Programmierer weiß jedoch normalerweise nicht, woraus ein bestimmter weißer Raum besteht. Das Beste, was Sie tun müssen, ist, alle möglichen Kombinationen für alle weißen Raumzeichen mit dem Muster zu berücksichtigen. Beachten Sie die Verwendung des Regex oder des Bedieners, | .

Es gibt immer noch ein Problem. Das Muster ”| \ t | \ n | \ r | \ v | \ f” würde zu Beginn der Saite nur mit einem weißen Raumzeichen übereinstimmen und nur mit einem weißen Space-Zeichen am Ende der Zeichenfolge übereinstimmen. Dies liegt an der | Betreiber. Dieses Muster muss also so geändert werden. Daher muss ein möglicher Charakter mit Null oder mehr Male der Syntax abgestimmt werden, x* . Und das ultimative Muster, das aufeinanderfolgende Whitespace -Charaktere entspricht, ist

"[| \ t | \ n | \ r | \ v | \ f]*"

Verwenden,

"^[| \ t | \ n | \ r | \ v | \ f]*"

Beachten Sie das Vorhandensein und die Position von ^ .

Verwenden,

"[| \ t | \ n | \ r | \ v | \ f]*$"

Beachten Sie das Vorhandensein und die Position von $ . Und um aufeinanderfolgende weiße Raumfiguren zu Beginn oder am Ende der Zeichenfolge zu entsprechen, verwenden Sie,

"^[| \ t | \ n | \ r | \ v | \ f]*| [| \ t | \ n | \ r | \ v | \ f]*$"

Beachten Sie die Verwendung von | in der Mitte des Gesamtmusters.

Nach dem Matching werden alle weißen Space-Zeichen durch nichts ersetzt, das heißt „“, die leere Zeichenfolge. Denken Sie daran, dass die Funktion regex_replace () alle Vorkommen von Unterstrichen ersetzt.

Das folgende Programm erfasst die Zielfolge: „Ich möchte Demokratie! \ n "zu" Ich will Demokratie!”:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

char st [] = "\ t Ich will Demokratie! \N";
String retstr = regex_replace (str, regex ("^[| \ t | \ n | \ r | \ v | \ f]*| [| \ t | \ n | \ r | \ v | \ f]*$" ), "");
Cout << retStr << endl;
Rückkehr 0;

Die Ausgabe ist:

Ich will Demokratie!

Abschluss

Das Trimmen einer Schnur bedeutet, weiße Space vor und hinter der Schnur zu entfernen. Ein weißer Raum besteht aus weißen Raumfiguren. White Space -Zeichen sind ", '\ n', '\ r', 'f', '\ t" \ v'. Um eine Zeichenfolge in C ++, einschließlich der Regex -Bibliothek. Ersetzen Sie jeden weißen Raum am Start und/oder am Ende der Zeichenfolge durch die leere Zeichenfolge.