logo

strtok() i strtok_r() funcions en C amb exemples

C proporciona dues funcions strtok() i strtok_r() per dividir una cadena per algun delimitador. Dividir una cadena és una tasca molt habitual. Per exemple, tenim una llista d'elements separats per comes d'un fitxer i volem elements individuals en una matriu.

Funció strtok().

El mètode strtok() divideix str[] segons els delimitadors donats i retorna el següent testimoni. S'ha de cridar en un bucle per obtenir totes les fitxes. Torna NULL quan no hi ha més fitxes.



Sintaxi de strtok()

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

Paràmetres

    str : És el punter a la cadena que s'ha de marcar. delims : és una cadena que conté tots els delimitadors.

Valor de retorn

  • Retorna el punter al primer testimoni trobat a la cadena.
  • Retorna NULL si no s'han trobat més fitxes.

Exemples de strtok()

Exemple 1: Programa C per demostrar com dividir una cadena utilitzant 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;> }>

>

>

Sortida

 Geeks for Geeks>

Exemple 2: Programa per a demostrar l'ús de la funció strtok() per tokenitzar una cadena basada en un delimitador.

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

>

>

Sortida

 Geeks for geeks Contribute>

Aplicació pràctica de strtok()

strtok() es pot utilitzar per dividir una cadena en diverses cadenes basades en alguns separadors. A fitxer CSV senzill el suport es podria implementar mitjançant aquesta funció. Els fitxers CSV tenen comes com a delimitadors.

Exemple 3: C Programa per demostrar l'ús de la funció strtok() en C per implementar a fitxer CSV senzill.

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

>

>

Sortida

1997, Ford, E350, ac, 3000.00,>

Funció strtok_r().

Igual que la funció strtok() a C, strtok_r() fa la mateixa tasca d'analitzar una cadena en una seqüència de fitxes. strtok_r() és una versió reentrant de strtok(), per tant, és segura per a fils.

Sintaxi de strtok_r()

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

Paràmetres

    str : És el punter a la cadena que s'ha de marcar. delims : és una cadena que conté tots els delimitadors. saveptr : És un punter a una variable char * que s'utilitza internament per strtok_r() per tal de mantenir el context entre trucades successives que analitzen la mateixa cadena.

Valor de retorn

  • Retorna el punter al primer testimoni trobat a la cadena.
  • Retorna NULL si no s'han trobat més fitxes.

Exemples de strtok_r()

Exemple 1: un programa C simple per mostrar l'ús de 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);> }>

>

>

Sortida

Geeks for Geeks>

Tokenització imbricada a C

Exemple 2: El programa C següent demostra l'ús de la funció strtok_r() per a la tokenització imbricada.

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

>

>

Sortida

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

Diferència entre strtok() i strtok_r()

Vegem les diferències entre les funcions strtok() i strtok_r() en forma tabular, tal com es mostra a continuació:

S.No.

strtok()

strtok_r()

1.

S'utilitza per trencar la cadena de cadena en una sèrie de fitxes. S'utilitza per descodificar una cadena en un patró per a fitxes.

2.

La sintaxi és la següent:

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

programació en matrius c
La seva sintaxi és la següent:
char *strtok_r(char *cadena, const char *limitador, char **context);

3.

Utilitza el delimitador per continuar. És una variant que s'ha tornat a introduir de strtok().

4.

Pren dos paràmetres. Es necessita tres paràmetres.

5.

Retorna un punter al primer testimoni trobat a la cadena. Retorna un punter al primer testimoni trobat a la cadena.
6. No és segur per a fils. És segur per a fils.