logo

strtok() og strtok_r() fungerer i C med eksempler

C gir to funksjoner strtok() og strtok_r() for å dele en streng med et skilletegn. Å dele en streng er en veldig vanlig oppgave. For eksempel har vi en kommadelt liste over elementer fra en fil, og vi vil ha individuelle elementer i en matrise.

strtok() Funksjon

Strtok()-metoden deler str[] i henhold til gitte skilletegn og returnerer neste token. Den må kalles i en loop for å få alle tokens. Den returnerer NULL når det ikke er flere tokens.



Syntaks for strtok()

char * strtok (char * str , const char * delims );>

Parametere

    str : Det er pekeren til strengen som skal tokeniseres. delims : Det er en streng som inneholder alle skilletegn.

Returverdi

  • Den returnerer pekeren til det første tokenet som ble funnet i strengen.
  • Den returnerer NULL hvis det ikke finnes flere tokens.

Eksempler på strtok()

Eksempel 1: C Program for å demonstrere hvordan du deler en streng ved å bruke strtok().

C








// C program for splitting a string> // using strtok()> #include> #include> int> main()> {> >char> str[] =>'Geeks-for-Geeks'>;> >// Returns first token> >char>* token =>strtok>(str,>' - '>);> >// Keep printing tokens while one of the> >// delimiters present in str[].> >while> (token != NULL) {> >printf>(>' % s '>, token);> >token =>strtok>(NULL,>' - '>);> >}> >return> 0;> }>

>

>

Produksjon

 Geeks for Geeks>

Eksempel 2: Program for å demonstrere bruken av strtok()-funksjonen for å tokenisere en streng basert på et skilletegn.

C




// C code to demonstrate working of> // strtok> #include> #include> // Driver function> int> main()> {> >// Declaration of string> >char> gfg[100] =>' Geeks - for - geeks - Contribute'>;> >// Declaration of delimiter> >const> char> s[4] =>'-'>;> >char>* tok;> >// Use of strtok> >// get first token> >tok =>strtok>(gfg, s);> >// Checks for delimiter> >while> (tok != 0) {> >printf>(>' %s '>, tok);> >// Use of strtok> >// go through other tokens> >tok =>strtok>(0, s);> >}> >return> (0);> }>

>

>

Produksjon

 Geeks for geeks Contribute>

Praktisk anvendelse av strtok()

strtok() kan brukes til å dele en streng i flere strenger basert på noen skilletegn. EN enkel CSV-fil støtte kan implementeres ved hjelp av denne funksjonen. CSV-filer har kommaer som skilletegn.

Eksempel 3: C Program for å demonstrere bruken av strtok()-funksjonen i C for å implementere en enkel CSV-fil.

C




// C code to demonstrate practical application of> // strtok> #include> #include> // Driver function> int> main()> {> >// Declaration of string> >// Information to be converted into CSV file> >char> gfg[100] =>' 1997 Ford E350 ac 3000.00'>;> >// Declaration of delimiter> >const> char> s[4] =>' '>;> >char>* tok;> >// Use of strtok> >// get first token> >tok =>strtok>(gfg, s);> >// Checks for delimiter> >while> (tok != 0) {> >printf>(>'%s, '>, tok);> >// Use of strtok> >// go through other tokens> >tok =>strtok>(0, s);> >}> >return> (0);> }>

>

>

Produksjon

1997, Ford, E350, ac, 3000.00,>

strtok_r() Funksjon

Akkurat som strtok()-funksjonen i C, gjør strtok_r() den samme oppgaven med å analysere en streng til en sekvens av tokens. strtok_r() er en reentrant versjon av strtok(), derfor er den trådsikker.

Syntaks for strtok_r()

char * strtok_r (char * str , const char * delim , char ** saveptr );>

Parametere

    str : Det er pekeren til strengen som skal tokeniseres. delims : Det er en streng som inneholder alle skilletegn. saveptr : Det er en peker til en char *-variabel som brukes internt av strtok_r() for å opprettholde konteksten mellom påfølgende kall som analyserer den samme strengen.

Returverdi

  • Den returnerer pekeren til det første tokenet som ble funnet i strengen.
  • Den returnerer NULL hvis det ikke finnes flere tokens.

Eksempler på strtok_r()

Eksempel 1: et enkelt C-program for å vise bruken av strtok_r().

C




// C program to demonstrate working of strtok_r()> // by splitting string based on space character.> #include> #include> int> main()> {> >char> str[] =>'Geeks for Geeks'>;> >char>* token;> >char>* rest = str;> >while> ((token = strtok_r(rest,>' '>, &rest)))> >printf>(>'%s '>, token);> >return> (0);> }>

>

>

Produksjon

Geeks for Geeks>

Nested-Tokenization i C

Eksempel 2: C-programmet nedenfor demonstrerer bruken av strtok_r()-funksjonen for Nested Tokenization.

C




#include> #include> int> main()> {> >char> str[] =>'Hello, World! Geeks for Geeks.'>;> >const> char> outer_delimiters[] =>'!.'>;> >const> char> inner_delimiters[] =>' ,'>;> >char>* token;> >char>* outer_saveptr = NULL;> >char>* inner_saveptr = NULL;> >token = strtok_r(str, outer_delimiters, &outer_saveptr);> >while> (token != NULL) {> >printf>(>'Outer Token: %s '>, token);> >char>* inner_token = strtok_r(> >token, inner_delimiters, &inner_saveptr);> >while> (inner_token != NULL) {> >printf>(>'Inner Token: %s '>, inner_token);> >inner_token = strtok_r(NULL, inner_delimiters,> >&inner_saveptr);> >}> >token = strtok_r(NULL, outer_delimiters,> >&outer_saveptr);> >}> >return> 0;> }>

>

>

Produksjon

Outer Token: Hello, World Inner Token: Hello Inner Token: World Outer Token: Geeks for Geeks Inner Token: Geeks Inner Token: for Inner Token: Geeks>

Forskjellen mellom strtok() og strtok_r()

La oss se forskjellene mellom strtok() og strtok_r() funksjoner i en tabellform som vist nedenfor:

Ja Nei.

strtok()

strtok_r()

1.

Den brukes til å bryte strengen i en serie med tokens. Den brukes til å dekode en streng til et mønster for tokens.

2.

Syntaksen er som følger:

char *strtok(char *str, const char *delim)

prologspråk
Syntaksen er som følger:
char *strtok_r(char *streng, const char *limiter, char **kontekst);

3.

Den bruker skilletegnet for å fortsette. Det er en gjeninnført variant av strtok().

4.

Det krever to parametere. Det krever tre parametere.

5.

Den returnerer en peker til det første tokenet som finnes i strengen. Den returnerer en peker til det første tokenet som finnes i strengen.
6. Den er ikke trådsikker. Den er trådsikker.