logo

strtok() och strtok_r() fungerar i C med exempel

C tillhandahåller två funktioner strtok() och strtok_r() för att dela en sträng med någon avgränsare. Att klyva ett snöre är en mycket vanlig uppgift. Till exempel har vi en kommaseparerad lista med objekt från en fil och vi vill ha enskilda objekt i en array.

strtok() Funktion

Metoden strtok() delar upp str[] enligt givna avgränsare och returnerar nästa token. Den måste anropas i en loop för att få alla tokens. Den returnerar NULL när det inte finns fler tokens.



Syntax för strtok()

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

Parametrar

    str : Det är pekaren till strängen som ska tokeniseras. delims : Det är en sträng som innehåller alla avgränsare.

Returvärde

  • Den returnerar pekaren till den första token som påträffas i strängen.
  • Den returnerar NULL om det inte finns några fler tokens.

Exempel på strtok()

Exempel 1: C Program för att visa hur man delar en sträng med 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>

Exempel 2: Program för att demonstrera användningen av strtok()-funktionen för att tokenisera en sträng baserat på en avgränsare.

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 tillämpning av strtok()

strtok() kan användas för att dela upp en sträng i flera strängar baserat på vissa separatorer. A enkel CSV-fil support kan implementeras med denna funktion. CSV-filer har kommatecken som avgränsare.

Exempel 3: C Program för att demonstrera användningen av strtok()-funktionen i C för att implementera 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);> }>

>

>

Produktion

1997, Ford, E350, ac, 3000.00,>

strtok_r() Funktion

Precis som strtok()-funktionen i C, gör strtok_r() samma uppgift att analysera en sträng till en sekvens av tokens. strtok_r() är en återkommande version av strtok(), därför är den trådsäker.

Syntax för strtok_r()

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

Parametrar

    str : Det är pekaren till strängen som ska tokeniseras. delims : Det är en sträng som innehåller alla avgränsare. saveptr : Det är en pekare till en char *-variabel som används internt av strtok_r() för att upprätthålla sammanhanget mellan successiva anrop som analyserar samma sträng.

Returvärde

  • Den returnerar pekaren till den första token som påträffas i strängen.
  • Den returnerar NULL om det inte finns några fler tokens.

Exempel på strtok_r()

Exempel 1: ett enkelt C-program för att visa användningen 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);> }>

>

>

Produktion

Geeks for Geeks>

Nested-Tokenization i C

Exempel 2: C-programmet nedan visar användningen av strtok_r()-funktionen för 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>

Skillnaden mellan strtok() och strtok_r()

Låt oss se skillnaderna mellan funktionerna strtok() och strtok_r() i tabellform som visas nedan:

Ja Nej.

strtok()

strtok_r()

1.

Den används för att bryta sträng str i en serie tokens. Den används för att avkoda en sträng till ett mönster för tokens.

2.

Syntaxen är som följer:

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

java matematik
Dess syntax är följande:
char *strtok_r(char *sträng, const char *limiter, char **kontext);

3.

Den använder avgränsaren för att fortsätta. Det är en återinmatad variant av strtok().

4.

Det krävs två parametrar. Det krävs tre parametrar.

5.

Den returnerar en pekare till den första token som finns i strängen. Den returnerar en pekare till den första token som finns i strängen.
6. Den är inte trådsäker. Den är trådsäker.