strtok() og strtok_r() fungerer i C med eksempler
C gir to funksjoner strtok() og strtok_r() for å dele en streng med et skilletegn. Å dele en streng er en veldig vanlig oppgave. For eksempel har vi en kommadelt liste over elementer fra en fil, og vi vil ha individuelle elementer i en matrise.
strtok() Funksjon
Strtok()-metoden deler str[] i henhold til gitte skilletegn og returnerer neste token. Den må kalles i en loop for å få alle tokens. Den returnerer NULL når det ikke er flere tokens.
Syntaks for strtok()
char * strtok (char * str , const char * delims );
Parametere
- str : Det er pekeren til strengen som skal tokeniseres. delims : Det er en streng som inneholder alle skilletegn.
Returverdi
- Den returnerer pekeren til det første tokenet som ble funnet i strengen.
- Den returnerer NULL hvis det ikke finnes flere tokens.
Eksempler på strtok()
Eksempel 1: C Program for å demonstrere hvordan du deler en streng ved å bruke 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;> }> |
Produksjon
Geeks for Geeks
Eksempel 2: Program for å demonstrere bruken av strtok()-funksjonen for å tokenisere en streng basert på et skilletegn.
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);> }> |
Produksjon
Geeks for geeks Contribute
Praktisk anvendelse av strtok()
strtok() kan brukes til å dele en streng i flere strenger basert på noen skilletegn. EN enkel CSV-fil støtte kan implementeres ved hjelp av denne funksjonen. CSV-filer har kommaer som skilletegn.
Eksempel 3: C Program for å demonstrere bruken av strtok()-funksjonen i C for å implementere en enkel CSV-fil.
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);> }> |
Produksjon
1997, Ford, E350, ac, 3000.00,
strtok_r() Funksjon
Akkurat som strtok()-funksjonen i C, gjør strtok_r() den samme oppgaven med å analysere en streng til en sekvens av tokens. strtok_r() er en reentrant versjon av strtok(), derfor er den trådsikker.
Syntaks for strtok_r()
char * strtok_r (char * str , const char * delim , char ** saveptr );
Parametere
- str : Det er pekeren til strengen som skal tokeniseres. delims : Det er en streng som inneholder alle skilletegn. saveptr : Det er en peker til en char *-variabel som brukes internt av strtok_r() for å opprettholde konteksten mellom påfølgende kall som analyserer den samme strengen.
Returverdi
- Den returnerer pekeren til det første tokenet som ble funnet i strengen.
- Den returnerer NULL hvis det ikke finnes flere tokens.
Eksempler på strtok_r()
Eksempel 1: et enkelt C-program for å vise bruken av 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);> }> |
Produksjon
Geeks for Geeks
Nested-Tokenization i C
Eksempel 2: C-programmet nedenfor demonstrerer bruken av strtok_r()-funksjonen for Nested Tokenization.
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;> }> |
Produksjon
Outer Token: Hello, World Inner Token: Hello Inner Token: World Outer Token: Geeks for Geeks Inner Token: Geeks Inner Token: for Inner Token: Geeks
Forskjellen mellom strtok() og strtok_r()
La oss se forskjellene mellom strtok() og strtok_r() funksjoner i en tabellform som vist nedenfor:
| Ja Nei. | strtok() | strtok_r() |
|---|---|---|
| 1. | Den brukes til å bryte strengen i en serie med tokens. | Den brukes til å dekode en streng til et mønster for tokens. |
| 2. | Syntaksen er som følger: char *strtok(char *str, const char *delim) | Syntaksen er som følger: char *strtok_r(char *streng, const char *limiter, char **kontekst); |
| 3. | Den bruker skilletegnet for å fortsette. | Det er en gjeninnført variant av strtok(). |
| 4. | Det krever to parametere. | Det krever tre parametere. |
| 5. | Den returnerer en peker til det første tokenet som finnes i strengen. | Den returnerer en peker til det første tokenet som finnes i strengen. |
| 6. | Den er ikke trådsikker. | Den er trådsikker. |