Hvordan dele strenger basert på avgrenser i C

Hvordan dele strenger basert på avgrenser i C
Streng er en rekke tegn og avgrenser kan være hvilken som helst rekke tegn eller et hvilket som helst spesielt tegn, som kan brukes til å dele opp strengen i flere underlag. Avgrensen vil være en del av strengen. Vi vil gå gjennom implementeringen av eksemplet og vil også implementere en del C -kode for å dele strengen.

Streng: Streng er en rekke tegn. Et par eksempler på strenger er:

“New Delhi er hovedstad i India”
“Bob studerer i Stanford University”

Avgrensende: Enhver karakter eller sett med karakterer kan betraktes som avgrenser. Hvis en streng skal deles ut basert på avgrenser, bør avgrenseren være en del av strengen, ellers vil full streng være utgangsstrengen.

Vanlige brukte avgrensningseksempler er: ““ (plass) ,, (komma), '\ n' (ny linje) og mange flere.

Splitting strengen basert på avgrenser:

La oss betrakte en eksempelstreng som "Fox lever i skog" og avgrensning som "" (plass), så vil strengen dele seg i flere strenger. Flere strenger etter splitt.

Så nå er vi klare på begrepet splitting, og vi er også klare på strengen og avgrensningsdefinisjonen. La oss fortsette med å utforske implementeringen av splitting i C.

Standard C -funksjon for splittelse basert på avgrenser:

C gir Strtok () Funksjon, som kan brukes til å dele strengen i symboler basert på den valgte avgrenseren.

Funksjonsprototype:

Char *Strtok (Char *Begrensning str, const char *begrenser Delim);

Header skal inkluderes:

#inkludere

C -program for å dele strengen basert på avgrenser ved bruk av strtok ():

#inkludere
#inkludere
int main ()

Char String [] = "Bob studerer i Stanford University";
char *delim = "";
usignert telling = 0;
/* Første samtale til Strtok bør gjøres med streng og avgrensning som første og andre parameter*/
char *token = strtok (streng, delim);
telle ++;
/* Påfølgende anrop til Strtok bør være med første parameter som null og andre parameter som avgrensning
* * Returverdien til Strtok vil være den delte strengen basert på avgrenser */
mens (token != Null)

printf ("token nei. %d: %s \ n ", count, token);
token = strTok (null, delim);
telle ++;

retur 0;

C -programmets øyeblikksbilde:

Utgang fra programmet:

La oss nå diskutere vår egen implementering til Split String basert på avgrensning uten å bruke standard C -funksjonen (Strtok ()).

Vi må søke i avgrensende tilstedeværelse i strengen og kan returnere adressen til det første tegnet på strengtokenet rett før avgrenseren.

C -funksjon for å søke på symbolet basert på avgrenser kan implementeres som nedenfor:

char *search_token (char *streng, char *delim)

statisk char *husk = null;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (delim == null)
return null;
if ((streng == null) && (husk == null))
return null;
if (streng == null)
String = husk;
String_length = strlen (streng) + 1;
for (i = 0; i
if (String [i] == Delim [0])

search_hit = 1;
gå i stykker;


if (search_hit != 1)

Husk = null;
Returstreng;

streng [i] = '\ 0';
if ((streng+i+1) != Null)
Husk = streng + i + 1;
ellers
Husk = null;
Returstreng;

Over er søkefunksjonen for å søke etter tokenet, når token er funnet karakter før tokenet kan kopieres og hentes fra kildestrengbufferen.

Komplett C -program med implementeringen vår vil se ut nedenfor:

#inkludere
#inkludere
char *search_token (char *streng, char *delim)

statisk char *husk = null;
int string_length = 0;
int i = 0;
int search_hit = 0;
if (delim == null)
return null;
if ((streng == null) && (husk == null))
return null;
if (streng == null)
String = husk;
String_length = strlen (streng) + 1;
for (i = 0; i
if (String [i] == Delim [0])

search_hit = 1;
gå i stykker;


if (search_hit != 1)

Husk = null;
Returstreng;

streng [i] = '\ 0';
if ((streng+i+1) != Null)
Husk = streng + i + 1;
ellers
Husk = null;
Returstreng;

int main ()

Char String [] = "Bob studerer i Stanford University";
char *delim = "";
usignert telling = 0;
char *token;
printf ("full streng = %s \ n", streng);
/* Første samtale til Search_toekn skal gjøres med streng og avgrensning som første og andre parameter*/
token = search_token (streng, delim);
// printf ("token nei. %d: %s \ n ", count, token);
telle ++;
/* Påfølgende anrop til Strtok bør være med første parameter som null og andre parameter som avgrensning
* * Returverdien til Strtok vil være den delte strengen basert på avgrenser */
mens (token != Null)

printf ("token nei. %d: %s \ n ", count, token);
token = search_token (null, delim);
telle ++;

retur 0;

Utgang fra programmet ovenfor med samme inngangssett som standard C Strtok -funksjon:

Bash-4.2 $ ./en.ute
Full streng = Bob studerer ved Stanford University
Token nei. 1: Bob
Token nei. 2: er
Token nei. 3: Studerer
Token nei. 4: in
Token nei. 5: Stanford
Token nei. 6: Universitetet
Bash-4.2 $

Stillbilder av det komplette programmet:

Utgangssnapsbilde:

Konklusjon:

Så langt diskuterte vi om splittingen av strengen basert på avgrenser. Det er allerede tilgjengelige bibliotekmåter å gjøre det på. Bibliotekfunksjonen som kan brukes til å dele strengen basert på avgrenser er strtok. Vi tok et eksempel på brukssak for å forstå bibliotekfunksjonen strtok. Vi skrev også et eksempelprogram for å forstå bruken av bibliotekfunksjon.

Andre del implementerte vi vår egen metode for å splitte strengen basert på avgrenser. Vi skrev en funksjon som er som C -funksjon Strtok. Forklaring av funksjonen til den tilpassede funksjonen ble gitt og demonstrert ved hjelp av den samme hovedfunksjonen som ble tatt i tilfelle C -bibliotekfunksjon. Eksempelutgang for programmet er også utstyrt med eksempelprogrammet.

Vi har også gått gjennom konseptet med strengdelte basert på avgrenser, bare for å oppsummere ethvert tegn som er søk i hovedstrengen kan betraktes som et symbol og kan søkes til tokenet oppstår. Når symbolet er funnet, er streng før tokenet returneres til innringerfunksjonen.