Hvordan dele strenger ved hjelp av avgrenser i C ++

Hvordan dele strenger ved hjelp av avgrenser i C ++
Å dele opp en streng ved hjelp av en avgrenser er en vanlig operasjon i programmering, spesielt når du jobber med tekstdata. EN avgrensning er et tegn eller sekvens av tegn som brukes til å skille en seksjon av en streng fra en annen. Når en tekst skilles inn i mindre underlag ved bruk av en avgrensning, avgrenseren eller separatoren er forhåndsbestemt. Mange programmeringsoppgaver, for eksempel inndata -parsing, teksttokenisering og strengbehandling, bruk denne teknikken. Det er flere streng-splitting Metoder tilgjengelig i C ++, hver har fordeler og ulemper.

I denne artikkelen vil vi utforske noen av de vanlige måtene å Del en streng ved hjelp av en avgrenser i c++.

Delte strenger ved bruk av avgrenser i C++

I C ++ er det flere tilnærminger for å bryte en streng ved hjelp av en avgrenser, inkludert:

  • Bruke funksjonene Find () og Substr ()
  • Ved hjelp av strtok () -funksjonen
  • Bruke StringStream -klassen

1: Bruke funksjonene Find () og Substr ()

En streng kan deles ved hjelp av C ++ -funksjonene finne() og substr (). Den første forekomsten av en substring er lokalisert ved hjelp av finne() metode. Hvis det ikke er flere forekomster, vil det gjenværende stykket av strengen bli returnert etter å ha blitt plassert i vektoren. Substring som begynner i starten av teksten og avsluttes ved avgrenseren kan deretter tas ut ved hjelp av substr () funksjon. Vi kan fortsette å gjøre dette til alle underlagene er oppnådd.

Her er et C ++ eksempel på hvordan Del en streng ved hjelp av en avgrenser:

#inkludere
#inkludere
int main ()
Std :: String Str = "Apple, Banana, Cherry";
std :: String Delimiter = ",";
størrelse_t pos = 0;
STD :: String Token;
mens ((pos = str.finn (avgrensning)) != std :: streng :: npos)
Token = str.substr (0, pos);
std :: cout << token << std::endl;
str.Slett (0, POS + avgrensning.lengde());

std :: cout << str << std::endl;
retur 0;

I eksemplet over, en streng som heter “Str” og en avgrenser som heter “Avgrenser” er definert. Underlagene fra “Str” blir deretter trukket ut med en stundsløyfe. Plasseringen av avgrenseren returneres av finne() metode, eller Std :: String :: NPOS Hvis det ikke kan lokaliseres. Substringen fra starten av “Str” opp til avgrenseren blir trukket ut ved hjelp av “Substr ()” på dette stedet, og det blir deretter trykt til konsollen. Den ekstraherte understrengen og avgrenseren blir deretter tatt ut av “Str” bruker "viske ut()" funksjon. Når det ikke er flere avgrensere i “Str”, Vi gjentar denne operasjonen. Etterpå sender vi ut den siste substringen "kirsebær" til konsollen.

Produksjon

2: Bruke strtok () -funksjonen

De Strtok () Funksjon er en annen funksjon i C ++ som effektivt kan dele strengene ved hjelp av en avgrensende i et hvilket som helst C ++ -program. Det tar ut to innganger; strengen som skal deles og avgrensningskarakteren. Her er en implementering av Strtok () Funksjon i C ++:

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

char str [100];
cout << " Enter a string: " <cin.getline (str, 100);
char *ptr;
PTR = Strtok (str, ",");
cout << " \n Splitting the string: " << endl;
mens (PTR != Null)

cout << ptr << endl;
PTR = Strtok (null, ",");

retur 0;

De Strtok () Funksjon brukes i koden ovenfor for å bryte en brukerstøttet inngangsstreng til symboler, ved hjelp av et komma og et rom som avgrensere. Så publiserer den hvert symbol på konsollen på en egen linje. Dette oppnås ved å lagre inngangsstrengen i en char -matrise, iterere over symbolene med en røyepeker, og deretter dele strengen gjentatte ganger til alle symbolene er vist.

Produksjon

3: Bruke StringStream -klassen

Bruker Klasse er en annen teknikk for å dele en streng i C++. Det er mulig å legge inn og sende ut formaterte data, inkludert strenger, ved hjelp av denne klassen. En streng som håndteres som en strøm kan ha underlag hentet fra den ved hjelp av getline () metode. De getline () Metoden vil trekke ut substring opp til avgrenseren hvis vi gir den avgrenseren som en parameter.

Her er en illustrasjon av hvordan Del en streng i C++ bruker StringStream () funksjon.

#inkludere
#inkludere
#inkludere
#inkludere
int main ()
std :: String input_string = "Apple, Banana, Cherry";
std :: vektor symboler;
std :: StringStream SS (input_string);
STD :: String Token;
mens (std :: getline (ss, token, ','))
symboler.push_back (token);

for (auto t: symboler)
std :: cout << t << std::endl;

retur 0;

I koden over brukes en avgrensningskarakter for å dele en inngangsstreng i symboler ved hjelp av . Før du trekker ut hvert symbol fra Ved hjelp av avgrenseren initialiserer programmet en objekt med inngangsstrengen. En vektor av strenger utvides deretter med hvert token. Programmet løkker deretter gjennom vektoren, og skriver ut hvert token til konsollen på slutten.

Produksjon

Konklusjon

Å dele opp en streng ved hjelp av en avgrenser er en effektiv tilnærming i C ++, og det er flere innebygde funksjoner i C ++ som gjør det mulig å dele strenger. Disse funksjonene inkluderer finn (), substr (), strtok () og StringStream klasse. Utviklerne bør vurdere de spesifikke kravene i applikasjonen og velge funksjonen som best fungerer for dem.