C ++ Strengtrimmetoder

C ++ Strengtrimmetoder
Å trimme en streng betyr å fjerne hvite mellomrom foran og bak strengen. Det neste spørsmålet er, hva er hvite rom? Følgende er en liste over hvite mellomrom i en streng:
  • "eller '\ 040': plass ved å trykke på romfeltetasten
  • '\ n': linjefôr
  • '\ r': vognretur
  • 'F': Form Feed
  • '\ t': horisontal fane
  • '\ V': vertikal fan

C ++ har ikke en funksjon for å trimme en streng. Det er et emne i dataprogrammering kalt, vanlige uttrykk, forkortet regex. Dette emnet har ordninger, som gjør det mulig for programmereren å søke etter en understreng i en målstreng og erstatte understrengen. Understrengen kan erstattes med ingenting, og slik slette den.

Søk-og-Replace med ingenting idé kan brukes til å trimme en streng. Så se etter alle hvite romkarakterer foran strengen og alle hvite rom-tegn bak strengen, og erstatt dem med ingenting. Heldigvis har C ++ et Regex -bibliotek, som må inkluderes i programmet for å gjøre dette.

Artikkelinnhold

  • INNLEDNING - Se ovenfor
  • Sammendrag av vanlige uttrykk
  • Søk og erstatt
  • Trimming ordentlig
  • Konklusjon

Sammendrag av vanlige uttrykk

Regex
Tenk på strengen:

"Dette er det for showet"

De fire første tegnene i denne strengen danner understrengen, "dette". De fire siste karakterene i strengen danner den siste understrengen, “Show”.

Nå kalles hele strengen målstrengen eller bare mål. Understrengen "dette" eller "show" kalles det vanlige uttrykket eller ganske enkelt, regex.

Matchende
Hvis "dette" blir søkt etter og lokalisert i målet, sies det å ha skjedd matching å ha skjedd. Hvis "show" blir søkt etter og lokalisert, sies det fortsatt at matching har skjedd. Matching skjer for enhver målstreng når en understreng blir funnet. Understrengen kan byttes ut. For eksempel kan "dette" erstattes med "her" og "show" kan erstattes med "spill" for å ha det nye målet,

"Her er det for spillet"

Hvis de første og siste ordene ikke var ønsket i det hele tatt, kunne de erstattes med ingenting, å ha,

"Er det for"

Dette siste resultatet er tilfeldigvis en ukonvensjonell trimming, som dessverre fortsatt ender med ett rom i begynnelsen, og et annet rom på slutten.

Mønster
En sløv understreng (“dette” eller “show”), som illustrert ovenfor, er et enkelt mønster. Tenk på følgende mål:

"Hei, det er et flaggermus på midten av veien.""

Programmereren vil kanskje vite om det er en rotte, katt eller flaggermus siden disse tre ordene er like på lyd. Han trenger et mønster for å identifisere ordet "katt" eller "rotte" eller "flaggermus". Legg merke til at hvert av disse ordene ender med "at", men begynner med 'B' eller 'C' eller 'R'. Mønsteret, for å matche noen av disse tre ordene, er

[bcr] kl

Dette betyr, match 'B' eller 'C' eller 'R', etterfulgt av “at”.

Gjentakelse
x*: betyr match 'x' 0 eller flere ganger, jeg.e., Ethvert antall ganger.

Matchende eksempler
Følgende program produserer en kamp for "flaggermus" i målstrengen, ved hjelp av regex -objektet, reg ("[bcr] at"), hvis mønster er [bcr] på.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

regex reg ("[bcr] at");
if (regex_search ("Hei, det er en flaggermus på midten av veien.", reg))
cout << "matched" << endl;
ellers
cout << "not matched" << endl;
retur 0;

Utgangen er: matchet.

Regex -biblioteket er inkludert i "#include". Regex -objektet er instantiert med uttalelsen,

regex reg ("[bcr] at");

[/cc]

Regex_search () -funksjonen fra biblioteket tar to argumenter her. Den første er målstrengen. Den andre er regex -objektet. Mønsteret, [BCR] på matchet “Bat” og slik at regex_search () -funksjonen returnerte sann. Ellers ville det ha kommet tilbake, falsk.

Følgende program illustrerer en match av mønsteret, bo*k for "bok":

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

regex reg ("bo*k");
if (regex_search ("Boken er god.", reg))
cout << "matched" << endl;
ellers
cout << "not matched" << endl;
retur 0;

Utgangen er: matchet. o* betyr, match 'o', null eller flere ganger. Det matchet faktisk 'O', to ganger i "bok".

Matchende begynnelse av målstrengen
For å matche begynnelsen på en målstreng, har mønsteret til å begynne med, ^ . Følgende program samsvarer med "dette" i begynnelsen av målstrengen, "dette er det for showet".

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

regex reg ("^dette");
if (regex_search ("Dette er det for showet", reg))
cout << "matched" << endl;
ellers
cout << "not matched" << endl;
retur 0;

Utgangen er: matchet. Legg merke til regex bokstavelig, "^dette" .

Matchende enden av målstrengen
For å matche slutten av en målstreng, må mønsteret ende med $. Følgende program samsvarer med “Show” på slutten av målstrengen, “Dette er det for showet”.

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

Regex Reg ("Show $");
if (regex_search ("Dette er det for showet", reg))
cout << "matched" << endl;
ellers
cout << "not matched" << endl;
retur 0;

Utgangen er: matchet. Legg merke til regex bokstavelig, "Vis $" .

Matchende alternativer
For å matche begynnelsen understreng eller ende-understrengen, | Metakarakter må skille begynnelses- og sluttmønstrene i det generelle mønsteret. Følgende program illustrerer dette:

#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

regex reg ("^dette | show $");
if (regex_search ("Dette er det for showet", reg))
cout << "matched" << endl;
ellers
cout << "not matched" << endl;
retur 0;

Utgangen er: matchet. Legg merke til regex bokstavelig, "^dette | vis $" .

Nå samsvarer Regex_search () -funksjonen vanligvis det første mønsteralternativet og stopper. Denne saken samsvarer med "dette" i begynnelsen av målet og stopper uten å fortsette å matche "show" på slutten av målet.

Heldigvis erstatter regex_replace () -funksjonen til C ++ Regex -biblioteket alle alternativer hvor som helst i målstrengen i standardmodus. Og så, denne Regex_replace () -funksjonen er egnet til å trimme strenger. Det vil si se etter det totale hvite rommet foran strengen, og se etter det totale hvitrommet bak strengen, og erstatt begge deler med ingenting.

Søk og erstatt

Følgende program erstatter de første og siste ordene, av målstrengen, med ordet, “hund”:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

char str [] = "Dette er det for showet";
String newsTr = regex_replace (str, regex ("^dette | show $"), "hund");
cout << newStr << endl;
retur 0;

Utgangen er:

Hund er det for hunden

Programmet bruker regex_replace () -funksjonen. Det første argumentet er målstrengen. Det andre argumentet er regex -objektet. Det tredje argumentet er den erstatning av strengen bokstavelig. Returstrengen er det modifiserte strengobjektet. Så strengklassen måtte inkluderes.

Trimming ordentlig

Tenk på strengen:

"\ t jeg vil ha demokrati! \ n "

To White-Space-tegn, '\ T' og ", er foran den nyttige teksten. Ytterligere to-rom-karakterer, "og '\ t', står bak den nyttige teksten. Trimming betyr å fjerne alle hvite romkarakterer foran teksten og fjerne alle hvite rom-tegn bak teksten.

For å matche de to første karakterene her, er mønsteret “\ T | “Det er, '\ t' eller ett rom. For å matche de to siste karakterene her, er mønsteret ”| \ t”, det vil si ett rom eller '\ t'. Programmereren vet imidlertid ikke hva en bestemt hvitrom er består av. Så det beste å gjøre, er å redegjøre for alle mulige kombinasjoner for alle hvite-rom-tegn, med mønsteret, ”| \ t | \ n | \ r | \ V | \ f”. Legg merke til bruken av regex eller operatør, | .

Det er fortsatt et problem. Mønsteret, ”| \ t | \ n | \ r | \ V | \ f” ville bare samsvare med ett hvitt-rom-tegn i starten av strengen og ville bare samsvare med ett hvitt-rom-tegn på slutten av strengen. Dette er på grunn av | operatører. Så dette mønsteret må modifiseres for å matche alle hvite-rom-tegnene i starten av strengen eller på slutten av strengen. Så enhver mulig karakter må matches null eller flere ganger med syntaks, x* . Og det endelige mønsteret for å matche påfølgende hvitrommetegn er

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

Bruk for å matche påfølgende hvitt-rom-tegn i starten av strengen, bruk,

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

Legg merke til tilstedeværelsen og plasseringen av ^ .

For å matche påfølgende hvitt-rom-tegn på slutten av strengen, bruk,

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

Legg merke til tilstedeværelsen og plasseringen av $ . Og for å matche påfølgende hvitt-rom-tegn i starten eller på slutten av strengen, bruk,

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

Legg merke til bruken av | Midt i det generelle mønsteret.

Etter matching erstattes alle hvite-rom-tegnene med ingenting, det vil si "", den tomme strengen. Husk at funksjonen regex_replace () erstatter alle forekomster av understrenger tilpasset mønsteret over hele målstrengen.

Følgende program, trimmer målstrengen, “\ t jeg vil ha demokrati! \ n ”til“ Jeg vil ha demokrati!”:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

char str [] = "\ t jeg vil ha demokrati! \ n ";
String retstr = regex_replace (str, regex ("^[| \ t | \ n | \ r | \ v | \ f]*| [| \ t | \ n | \ r | \ v | \ f]*$" ), "");
cout << retStr << endl;
retur 0;

Utgangen er:

Jeg vil ha demokrati!

Konklusjon

Å trimme en streng betyr å fjerne hvite rom foran og bak strengen. Et hvitt-rom består av hvite romkarakterer. White Space -tegn er ", '\ n', '\ r', 'f', '\ t" \ V'. For å trimme en streng i C ++, inkludert Regex -biblioteket, og bruk Regex_Replace () -funksjonen for å søke og erstatte. Bytt ut et hvilket som helst rom i starten og/eller på slutten av strengen med den tomme strengen.