C pateikia dvi funkcijas strtok() ir strtok_r(), skirtas eilutei padalyti tam tikru skyrikliu. Stygos padalijimas yra labai dažna užduotis. Pavyzdžiui, turime kableliais atskirtą elementų sąrašą iš failo ir norime, kad masyve būtų atskiri elementai.
strtok() Funkcija
Strtok() metodas padalija str[] pagal duotus skyriklius ir grąžina kitą žetoną. Norint gauti visus žetonus, jį reikia iškviesti kilpa. Jis grąžina NULL, kai nebėra žetonų.
Strtok() sintaksė
char * strtok (char * str , const char * delims );>
Parametrai
- str : tai žymeklis į eilutę, kuri turi būti patvirtinta. delims : tai eilutė, kurioje yra visi skyrikliai.
Grąžinimo vertė
- Jis grąžina žymeklį į pirmą eilutėje aptiktą žetoną.
- Jis grąžina NULL, jei nerasta daugiau žetonų.
Strtok() pavyzdžiai
1 pavyzdys: C Programa, skirta parodyti, kaip padalinti eilutę naudojant 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;> }> |
>
>Išvestis
Geeks for Geeks>
2 pavyzdys: Programa, demonstruojanti strtok() funkcijos naudojimą, kad būtų galima ženklinti eilutę pagal skyriklį.
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);> }> |
>
>Išvestis
Geeks for geeks Contribute>
Praktinis taikymas strtok ()
strtok() gali būti naudojamas padalyti eilutę į kelias eilutes pagal kai kuriuos skyriklius. A paprastas CSV failas pagalba gali būti įdiegta naudojant šią funkciją. CSV failuose skiriamieji ženklai yra kableliai.
3 pavyzdys: C Programa, demonstruojanti strtok() funkcijos naudojimą C programoje įgyvendinant a paprastas CSV failas.
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);> }> |
>
>Išvestis
1997, Ford, E350, ac, 3000.00,>
strtok_r() Funkcija
Lygiai taip pat kaip strtok() funkcija C, strtok_r() atlieka tą pačią užduotį – analizuoja eilutę į žetonų seką. strtok_r() yra pakartotinė strtok() versija, todėl ji yra saugi.
strtok_r() sintaksė
char * strtok_r (char * str , const char * delim , char ** saveptr );>
Parametrai
- str : Tai žymeklis į eilutę, kuri turi būti patvirtinta. delims : tai eilutė, kurioje yra visi skyrikliai. saveptr : tai rodyklė į char * kintamąjį, kurį viduje naudoja strtok_r(), kad būtų išlaikytas kontekstas tarp nuoseklių skambučių, analizuojančių tą pačią eilutę.
Grąžinimo vertė
- Jis grąžina žymeklį į pirmą eilutėje aptiktą žetoną.
- Jis grąžina NULL, jei nerasta daugiau žetonų.
strtok_r() pavyzdžiai
1 pavyzdys: Paprasta C programa, rodanti strtok_r() naudojimą.
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);> }> |
>
>
Išvestis
Geeks for Geeks>
Įdėtas prieigos raktas C
2 pavyzdys: Toliau pateiktoje C programoje parodytas strtok_r() funkcijos naudojimas įdėtajam prieigos raktui.
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;> }> |
>
>
Išvestis
Outer Token: Hello, World Inner Token: Hello Inner Token: World Outer Token: Geeks for Geeks Inner Token: Geeks Inner Token: for Inner Token: Geeks>
Skirtumas tarp strtok() ir strtok_r()
Pažiūrėkime į skirtumus tarp strtok() ir strtok_r() funkcijų lentelės pavidalu, kaip parodyta toliau:
| Taip ne. | strtok () | strtok_r() |
|---|---|---|
| 1. | Jis naudojamas suskaidyti eilutę str į žetonų seriją. | Jis naudojamas iššifruoti eilutę į žetonų šabloną. |
| 2. | Sintaksė yra tokia: char *strtok (char * str, const char * delim) nuorodų duomenų tipai java | Jo sintaksė yra tokia: char *strtok_r(char *string, const char *ribotuvas, char **kontekstas); |
| 3. | Tęsti naudojamas skyriklis. | Tai iš naujo įvestas strtok() variantas. |
| 4. | Tam reikia dviejų parametrų. | Tam reikia trijų parametrų. |
| 5. | Jis grąžina žymeklį į pirmą eilutėje rastą žetoną. | Jis grąžina žymeklį į pirmą eilutėje rastą žetoną. |
| 6. | Tai nėra saugus siūlams. | Jis yra saugus siūlams. |