C biedt twee functies strtok() en strtok_r() voor het splitsen van een string door een scheidingsteken. Het splitsen van een string is een veel voorkomende taak. We hebben bijvoorbeeld een door komma's gescheiden lijst met items uit een bestand en we willen individuele items in een array.
strtok() Functie
De methode strtok() splitst str[] volgens bepaalde scheidingstekens en retourneert het volgende token. Het moet in een lus worden aangeroepen om alle tokens te krijgen. Het retourneert NULL als er geen tokens meer zijn.
Syntaxis van strtok()
char * strtok (char * str , const char * delims );>
Parameters
- str : Het is de verwijzing naar de string die moet worden getokeniseerd. scheidingstekens: Het is een string die alle scheidingstekens bevat.
Winstwaarde
- Het retourneert de pointer naar het eerste token dat in de string wordt aangetroffen.
- Het retourneert NULL als er geen tokens meer zijn gevonden.
Voorbeelden van strtok()
Voorbeeld 1: C Programma om te demonstreren hoe je een string splitst met 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;> }> |
>
>Uitvoer
Geeks for Geeks>
Voorbeeld 2: Programma dat het gebruik demonstreert van de functie strtok() om een tekenreeks te tokeniseren op basis van een scheidingsteken.
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);> }> |
>
>Uitvoer
Geeks for geeks Contribute>
Praktische toepassing van strtok()
strtok() kan worden gebruikt om een string in meerdere strings te splitsen op basis van enkele scheidingstekens. A eenvoudig CSV-bestand ondersteuning kan worden geïmplementeerd met behulp van deze functie. CSV-bestanden hebben komma's als scheidingstekens.
Voorbeeld 3: C Programma om het gebruik van de functie strtok() in C te demonstreren om a eenvoudig CSV-bestand.
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);> }> |
>
>Uitvoer
1997, Ford, E350, ac, 3000.00,>
strtok_r() Functie
Net als de functie strtok() in C, voert strtok_r() dezelfde taak uit: het parseren van een string in een reeks tokens. strtok_r() is een herintredende versie van strtok(), daarom is het thread-safe.
Syntaxis van strtok_r()
char * strtok_r (char * str , const char * delim , char ** saveptr );>
Parameters
- str : Het is de verwijzing naar de string die moet worden getokeniseerd. scheidingstekens: Het is een string die alle scheidingstekens bevat. saveptr: Het is een verwijzing naar een char * variabele die intern door strtok_r() wordt gebruikt om de context te behouden tussen opeenvolgende aanroepen die dezelfde string parseren.
Winstwaarde
- Het retourneert de pointer naar het eerste token dat in de string wordt aangetroffen.
- Het retourneert NULL als er geen tokens meer zijn gevonden.
Voorbeelden van strtok_r()
Voorbeeld 1: een eenvoudig C-programma om het gebruik van strtok_r() te tonen.
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);> }> |
>
>
Uitvoer
Geeks for Geeks>
Geneste tokenisatie in C
Voorbeeld 2: Het onderstaande C-programma demonstreert het gebruik van de functie strtok_r() voor geneste tokenisatie.
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;> }> |
>
>
Uitvoer
Outer Token: Hello, World Inner Token: Hello Inner Token: World Outer Token: Geeks for Geeks Inner Token: Geeks Inner Token: for Inner Token: Geeks>
Verschil tussen strtok() en strtok_r()
Laten we de verschillen tussen de functies strtok() en strtok_r() in tabelvorm bekijken, zoals hieronder weergegeven:
| Ja nee. | strtok() | strtok_r() |
|---|---|---|
| 1. | Het wordt gebruikt om string str op te splitsen in een reeks tokens. | Het wordt gebruikt om een string te decoderen in een patroon voor tokens. |
| 2. | De syntaxis is als volgt: char *strtok(char *str, const char *delim) wat is een interface | De syntaxis is als volgt: char *strtok_r(char *string, const char *limiter, char **context); |
| 3. | Het gebruikt het scheidingsteken om verder te gaan. | Het is een opnieuw ingevoerde variant van strtok(). |
| 4. | Er zijn twee parameters nodig. | Er zijn drie parameters nodig. |
| 5. | Het retourneert een verwijzing naar het eerste token dat in de string wordt gevonden. | Het retourneert een verwijzing naar het eerste token dat in de string wordt gevonden. |
| 6. | Het is niet draadveilig. | Het is draadveilig. |