logo

Strtok() un strtok_r() funkcijas programmā C ar piemēriem

C nodrošina divas funkcijas strtok() un strtok_r(), lai sadalītu virkni ar kādu norobežotāju. Virknes sadalīšana ir ļoti izplatīts uzdevums. Piemēram, mums ir ar komatu atdalīts vienumu saraksts no faila, un mēs vēlamies, lai masīvā būtu atsevišķi vienumi.

strtok() Funkcija

Strtok() metode sadala str[] atbilstoši dotajiem norobežotājiem un atgriež nākamo marķieri. Tas ir jāizsauc cilpā, lai iegūtu visus marķierus. Tas atgriež NULL, ja vairs nav marķieru.



Strtok() sintakse

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

Parametri

    str: tas ir rādītājs uz tokenizējamo virkni. delims : tā ir virkne, kurā ir visi norobežotāji.

Atdeves vērtība

  • Tas atgriež rādītāju uz pirmo virknē atrasto marķieri.
  • Tas atgriež NULL, ja vairs nav atrasts neviens marķieris.

Strtok() piemēri

1. piemērs: C Programma, lai parādītu, kā sadalīt virkni, izmantojot 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;> }>

>

>

Izvade

 Geeks for Geeks>

2. piemērs: Programma, kas demonstrē funkcijas strtok() izmantošanu virknes marķierēšanai, pamatojoties uz norobežotāju.

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

>

>

Izvade

 Geeks for geeks Contribute>

Praktiskā pielietošana strtok()

Strtok() var izmantot, lai sadalītu virkni vairākās virknēs, pamatojoties uz dažiem atdalītājiem. A vienkāršs CSV fails atbalsts var tikt ieviests, izmantojot šo funkciju. CSV failos ir komats kā atdalītājs.

3. piemērs: C Programma, kas demonstrē funkcijas strtok() izmantošanu C, lai īstenotu a vienkāršs CSV fails.

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

>

>

Izvade

1997, Ford, E350, ac, 3000.00,>

strtok_r() Funkcija

Tāpat kā funkcija strtok() programmā C, arī strtok_r() veic to pašu uzdevumu, parsējot virkni marķieru secībā. strtok_r() ir strtok() atkārtoti ienākoša versija, tāpēc tā ir droša pavedienam.

Strtok_r() sintakse

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

Parametri

    str: tas ir rādītājs uz tokenizējamo virkni. delims : tā ir virkne, kurā ir visi norobežotāji. saveptr: tas ir rādītājs uz mainīgo char *, ko iekšēji izmanto strtok_r(), lai saglabātu kontekstu starp secīgiem izsaukumiem, kas parsē vienu un to pašu virkni.

Atdeves vērtība

  • Tas atgriež rādītāju uz pirmo virknē atrasto marķieri.
  • Tas atgriež NULL, ja vairs nav atrasts neviens marķieris.

Strtok_r() piemēri

1. piemērs: Vienkārša C programma, lai parādītu strtok_r() izmantošanu.

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

>

>

Izvade

Geeks for Geeks>

Nested-tokenizācija C

2. piemērs: Tālāk esošajā C programmā ir parādīta funkcijas strtok_r() izmantošana ligzdotai marķieri.

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

>

>

Izvade

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

Atšķirība starp strtok () un strtok_r ()

Redzēsim atšķirības starp strtok() un strtok_r() funkcijām tabulas veidā, kā parādīts zemāk:

Jā nē.

strtok()

strtok_r()

1.

To izmanto, lai sadalītu virkni str žetonu sērijā. To izmanto, lai atšifrētu virkni marķieru paraugā.

2.

Sintakse ir šāda:

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

programmēšana c masīvos
Tās sintakse ir šāda:
char *strtok_r(char *virkne, const char *limiter, char **konteksts);

3.

Lai turpinātu, tiek izmantots norobežotājs. Tas ir atkārtoti ievadīts strtok() variants.

4.

Tam nepieciešami divi parametri. Tam nepieciešami trīs parametri.

5.

Tas atgriež rādītāju uz pirmo virknē atrasto marķieri. Tas atgriež rādītāju uz pirmo virknē atrasto marķieri.
6. Tas nav drošs pavedienam. Tas ir vītnes drošs.