logo

funkciji strtok() in strtok_r() v C s primeri

C ponuja dve funkciji strtok() in strtok_r() za razdelitev niza z nekaterim ločilom. Razdelitev niza je zelo pogosta naloga. Na primer, imamo z vejicami ločen seznam elementov iz datoteke in želimo posamezne elemente v matriki.

Funkcija strtok().

Metoda strtok() razdeli str[] glede na dane ločila in vrne naslednji žeton. Za pridobitev vseh žetonov ga je treba poklicati v zanki. Ko ni več žetonov, vrne NULL.



Sintaksa strtok()

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

Parametri

    str : je kazalec na niz, ki ga je treba označiti z žetoni. ločila : je niz, ki vsebuje vse ločila.

Povratna vrednost

  • Vrne kazalec na prvi žeton, ki ga najde v nizu.
  • Če ni več najdenih žetonov, vrne NULL.

Primeri strtok()

Primer 1: Program C za prikaz, kako razdeliti niz z uporabo 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;> }>

>

>

Izhod

 Geeks for Geeks>

Primer 2: Program za prikaz uporabe funkcije strtok() za tokeniziranje niza na podlagi ločila.

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

>

>

Izhod

 Geeks for geeks Contribute>

Praktična uporaba strtok()

strtok() lahko uporabite za razdelitev niza na več nizov na podlagi nekaterih ločil. A preprosto datoteko CSV podpora se lahko izvaja s to funkcijo. Datoteke CSV imajo vejice kot ločila.

Primer 3: Program C za prikaz uporabe funkcije strtok() v C za implementacijo a preprosto datoteko CSV.

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

>

>

Izhod

1997, Ford, E350, ac, 3000.00,>

Funkcija strtok_r().

Tako kot funkcija strtok() v C, strtok_r() opravi isto nalogo razčlenjevanja niza v zaporedje žetonov. strtok_r() je vnovična različica strtok(), zato je varna za niti.

Sintaksa strtok_r()

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

Parametri

    str : je kazalec na niz, ki ga je treba označiti z žetoni. ločila : je niz, ki vsebuje vse ločila. saveptr : je kazalec na spremenljivko char *, ki jo interno uporablja strtok_r(), da ohrani kontekst med zaporednimi klici, ki razčlenijo isti niz.

Povratna vrednost

  • Vrne kazalec na prvi žeton, ki ga najde v nizu.
  • Če ni več najdenih žetonov, vrne NULL.

Primeri strtok_r()

Primer 1: preprost program C za prikaz uporabe 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);> }>

>

>

Izhod

Geeks for Geeks>

Ugnezdena tokenizacija v C

Primer 2: Spodnji program C prikazuje uporabo funkcije strtok_r() za ugnezdeno tokenizacijo.

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

>

>

Izhod

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

Razlika med strtok() in strtok_r()

Oglejmo si razlike med funkcijama strtok() in strtok_r() v obliki tabele, kot je prikazano spodaj:

da ne

strtok()

strtok_r()

1.

Uporablja se za razdelitev niza str v vrsto žetonov. Uporablja se za dekodiranje niza v vzorec za žetone.

2.

Sintaksa je naslednja:

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

kako je izumljena šola
Njegova sintaksa je naslednja:
char *strtok_r(char *niz, const char *omejevalnik, char **kontekst);

3.

Za nadaljevanje uporablja ločilo. Je ponovno vnesena različica strtok().

4.

Zahteva dva parametra. Zahteva tri parametre.

5.

Vrne kazalec na prvi najden žeton v nizu. Vrne kazalec na prvi najden žeton v nizu.
6. Ni varen za niti. Je varen za niti.