logo

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

C giver to funktioner strtok() og strtok_r() til at opdele en streng med en afgrænser. At flække en snor er en meget almindelig opgave. For eksempel har vi en kommasepareret liste over elementer fra en fil, og vi vil have individuelle elementer i et array.

strtok() Funktion

Strtok()-metoden opdeler str[] i henhold til givne afgrænsningstegn og returnerer det næste token. Det skal kaldes i en løkke for at få alle tokens. Det returnerer NULL, når der ikke er flere tokens.



Syntaks for strtok()

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

Parametre

    str : Det er markøren til strengen, der skal tokeniseres. delims : Det er en streng, der indeholder alle afgrænsningstegn.

Returværdi

  • Det returnerer markøren til det første token, der stødes på i strengen.
  • Det returnerer NULL, hvis der ikke er flere tokens fundet.

Eksempler på strtok()

Eksempel 1: C Program til at demonstrere, hvordan man deler en streng ved hjælp af 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;> }>

>

>

Produktion

 Geeks for Geeks>

Eksempel 2: Program til at demonstrere brugen af ​​strtok()-funktionen til at tokenisere en streng baseret på en afgrænser.

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);> }>

>

>

Produktion

 Geeks for geeks Contribute>

Praktisk anvendelse af strtok()

strtok() kan bruges til at opdele en streng i flere strenge baseret på nogle separatorer. EN simpel CSV-fil support kan implementeres ved hjælp af denne funktion. CSV-filer har kommaer som skilletegn.

Eksempel 3: C Program til at demonstrere brugen af ​​strtok()-funktionen i C til at implementere en simpel 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);> }>

>

>

Produktion

1997, Ford, E350, ac, 3000.00,>

strtok_r() Funktion

Ligesom strtok()-funktionen i C udfører strtok_r() den samme opgave at parse en streng til en sekvens af tokens. strtok_r() er en genindtrædende version af strtok(), derfor er den trådsikker.

Syntaks for strtok_r()

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

Parametre

    str : Det er markøren til strengen, der skal tokeniseres. delims : Det er en streng, der indeholder alle afgrænsningstegn. saveptr : Det er en pointer til en char *-variabel, der bruges internt af strtok_r() for at bevare konteksten mellem successive kald, der analyserer den samme streng.

Returværdi

  • Det returnerer markøren til det første token, der stødes på i strengen.
  • Det returnerer NULL, hvis der ikke er flere tokens fundet.

Eksempler på strtok_r()

Eksempel 1: et simpelt C-program til at vise brugen af ​​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);> }>

>

>

Produktion

Geeks for Geeks>

Indlejret-tokenisering i C

Eksempel 2: Nedenstående C-program demonstrerer brugen af ​​strtok_r()-funktionen til 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;> }>

>

>

Produktion

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

Forskellen mellem strtok() og strtok_r()

Lad os se forskellene mellem strtok() og strtok_r() funktioner i en tabelform som vist nedenfor:

Ja Nej.

strtok()

strtok_r()

1.

Det bruges til at bryde streng str i en række tokens. Det bruges til at afkode en streng til et mønster for tokens.

2.

Syntaksen er som følger:

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

prologsprog
Dens syntaks er som følger:
char *strtok_r(char *streng, const char *begrænser, char **kontekst);

3.

Den bruger afgrænseren til at fortsætte. Det er en genindført variant af strtok().

4.

Det kræver to parametre. Det kræver tre parametre.

5.

Det returnerer en pointer til det første token, der findes i strengen. Det returnerer en pointer til det første token, der findes i strengen.
6. Den er ikke trådsikker. Den er trådsikker.