logo

strtok()- ja strtok_r()-funktiot C:ssä esimerkein

C tarjoaa kaksi funktiota strtok() ja strtok_r() merkkijonon jakamiseen jollakin erottimella. Merkkijonon jakaminen on hyvin yleinen tehtävä. Meillä on esimerkiksi pilkuilla eroteltu luettelo kohteista tiedostosta ja haluamme yksittäisiä kohteita taulukkoon.

strtok()-funktio

Metodi strtok() jakaa str[]:n annettujen erottimien mukaan ja palauttaa seuraavan merkin. Se on kutsuttava silmukassa saadakseen kaikki merkit. Se palauttaa NULL-arvon, kun tunnuksia ei ole enää.



strtok() syntaksi

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

Parametrit

    str: Se on osoitin merkkijonoon. delims : Se on merkkijono, joka sisältää kaikki erottimet.

Palautusarvo

  • Se palauttaa osoittimen merkkijonossa havaittuun ensimmäiseen merkkiin.
  • Se palauttaa NULL-arvon, jos merkkejä ei löydy enempää.

Esimerkkejä strtok()

Esimerkki 1: C Ohjelma, joka näyttää kuinka jakaa merkkijono käyttämällä 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;> }>

>

>

Lähtö

 Geeks for Geeks>

Esimerkki 2: Ohjelma, joka esittelee strtok()-funktion käyttöä merkkijonon tokenointiin erottimen perusteella.

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

>

>

Lähtö

 Geeks for geeks Contribute>

Käytännön sovellus strtok()

strtok()-funktiota voidaan käyttää merkkijonon jakamiseen useiksi merkkijonoiksi joidenkin erottimien perusteella. A yksinkertainen CSV-tiedosto tuki voidaan toteuttaa tällä toiminnolla. CSV-tiedostoissa on pilkkuja erottimina.

Esimerkki 3: C Ohjelma havainnollistaa strtok()-funktion käyttöä C:ssä a yksinkertainen CSV-tiedosto.

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

>

>

Lähtö

1997, Ford, E350, ac, 3000.00,>

strtok_r() Funktio

Aivan kuten strtok()-funktio C:ssä, strtok_r() tekee saman tehtävän jäsentääkseen merkkijonon merkkijonoksi. strtok_r() on strtok() uudelleentuloversio, joten se on säikeen turvallinen.

Kohteen strtok_r() syntaksi

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

Parametrit

    str: Se on osoitin merkkijonoon. delims : Se on merkkijono, joka sisältää kaikki erottimet. saveptr : Se on osoitin char * -muuttujaan, jota strtok_r() käyttää sisäisesti kontekstin ylläpitämiseksi peräkkäisten kutsujen välillä, jotka jäsentävät samaa merkkijonoa.

Palautusarvo

  • Se palauttaa osoittimen merkkijonossa havaittuun ensimmäiseen merkkiin.
  • Se palauttaa NULL-arvon, jos merkkejä ei löydy enempää.

Esimerkkejä strtok_r()

Esimerkki 1: yksinkertainen C-ohjelma, joka näyttää strtok_r(:n) käytön.

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

>

>

Lähtö

Geeks for Geeks>

Sisäkkäinen tokenointi C:ssä

Esimerkki 2: Alla oleva C-ohjelma esittelee strtok_r()-funktion käytön sisäkkäisissä tunnisteissa.

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

>

>

Lähtö

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

Ero strtok() ja strtok_r() välillä

Katsotaanpa erot strtok()- ja strtok_r()-funktioiden välillä taulukkomuodossa alla esitetyllä tavalla:

Kyllä ei.

strtok()

strtok_r()

1.

Sitä käytetään jakamaan merkkijono str merkkien sarjaksi. Sitä käytetään merkkijonon purkamiseen merkkien malliksi.

2.

Syntaksi on seuraava:

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

verkkotopologiat
Sen syntaksi on seuraava:
char *strtok_r(merkki *merkkijono, const char *rajoitin, merkki **konteksti);

3.

Se käyttää erotinta jatkaakseen. Se on uudelleen syötetty muunnos strtok().

4.

Se vaatii kaksi parametria. Se vaatii kolme parametria.

5.

Se palauttaa osoittimen merkkijonosta löytyneeseen ensimmäiseen merkkiin. Se palauttaa osoittimen merkkijonosta löytyneeseen ensimmäiseen merkkiin.
6. Se ei ole lankaturvallinen. Se on lankaturvallinen.