logo

strtok() și strtok_r() funcții în C cu exemple

C oferă două funcții strtok() și strtok_r() pentru împărțirea unui șir cu un delimitator. Împărțirea unui șir este o sarcină foarte comună. De exemplu, avem o listă de elemente separate prin virgulă dintr-un fișier și dorim elemente individuale într-o matrice.

Funcția strtok().

Metoda strtok() împarte str[] în funcție de delimitatorii dați și returnează următorul token. Trebuie apelat într-o buclă pentru a obține toate jetoanele. Returnează NULL atunci când nu mai există jetoane.



Sintaxa lui strtok()

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

Parametrii

    str : este indicatorul către șirul care urmează să fie tokenizat. delims : este un șir care conține toți delimitatorii.

Valoare returnată

  • Acesta returnează indicatorul la primul simbol întâlnit în șir.
  • Returnează NULL dacă nu mai sunt găsite tokenuri.

Exemple de strtok()

Exemplul 1: C Program pentru a demonstra cum să împărțiți un șir folosind 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;> }>

>

>

Ieșire

 Geeks for Geeks>

Exemplul 2: Programul care demonstrează utilizarea funcției strtok() pentru a tokeniza un șir pe baza unui delimitator.

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

>

>

Ieșire

 Geeks for geeks Contribute>

Aplicarea practică a strtok()

strtok() poate fi folosit pentru a împărți un șir în mai multe șiruri pe baza unor separatori. A fișier CSV simplu suportul poate fi implementat folosind această funcție. Fișierele CSV au virgule ca delimitatori.

Exemplul 3: C Program pentru a demonstra utilizarea funcției strtok() în C pentru a implementa a fișier CSV simplu.

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

>

>

Ieșire

1997, Ford, E350, ac, 3000.00,>

Funcția strtok_r().

La fel ca funcția strtok() din C, strtok_r() face aceeași sarcină de a analiza un șir într-o secvență de jetoane. strtok_r() este o versiune reintrată a lui strtok(), prin urmare este sigură pentru fire.

Sintaxa lui strtok_r()

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

Parametrii

    str : este indicatorul către șirul care urmează să fie tokenizat. delims : este un șir care conține toți delimitatorii. saveptr : Este un pointer către o variabilă char * care este utilizată intern de strtok_r() pentru a menține contextul între apelurile succesive care parsează același șir.

Valoare returnată

  • Acesta returnează indicatorul la primul simbol întâlnit în șir.
  • Returnează NULL dacă nu mai sunt găsite tokenuri.

Exemple de strtok_r()

Exemplul 1: un program simplu C pentru a arăta utilizarea lui 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);> }>

>

>

Ieșire

Geeks for Geeks>

Imbricat-Tokenizare în C

Exemplul 2: Programul C de mai jos demonstrează utilizarea funcției strtok_r() pentru tokenizarea imbricată.

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

>

>

Ieșire

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

Diferența dintre strtok() și strtok_r()

Să vedem diferențele dintre funcțiile strtok() și strtok_r() într-o formă tabelară, așa cum se arată mai jos:

Da nu.

strtok()

strtok_r()

1.

Este folosit pentru a rupe string str într-o serie de jetoane. Este folosit pentru a decoda un șir într-un model pentru jetoane.

2.

Sintaxa este următoarea:

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

directorul de redenumire linux
Sintaxa sa este următoarea:
char *strtok_r(char *string, const char *limiter, char **context);

3.

Folosește delimitatorul pentru a continua. Este o variantă reintrodusă a strtok().

4.

Este nevoie de doi parametri. Este nevoie de trei parametri.

5.

Returnează un pointer către primul simbol găsit în șir. Returnează un pointer către primul simbol găsit în șir.
6. Nu este sigur pentru fire. Este sigur pentru fire.