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) | 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. |