C bietet zwei Funktionen strtok() und strtok_r() zum Aufteilen einer Zeichenfolge durch ein Trennzeichen. Das Teilen einer Zeichenfolge ist eine sehr häufige Aufgabe. Wir haben beispielsweise eine durch Kommas getrennte Liste von Elementen aus einer Datei und möchten einzelne Elemente in einem Array.
strtok() Funktion
Die Methode strtok() teilt str[] entsprechend den angegebenen Trennzeichen auf und gibt das nächste Token zurück. Es muss in einer Schleife aufgerufen werden, um alle Token zu erhalten. Es gibt NULL zurück, wenn keine Token mehr vorhanden sind.
Syntax von strtok()
char * strtok (char * str , const char * delims );>
Parameter
- str: Dies ist der Zeiger auf die Zeichenfolge, die tokenisiert werden soll. delims: Es ist eine Zeichenfolge, die alle Trennzeichen enthält.
Rückgabewert
- Es gibt den Zeiger auf das erste in der Zeichenfolge gefundene Token zurück.
- Es gibt NULL zurück, wenn keine weiteren Token gefunden werden.
Beispiele für strtok()
Beispiel 1: C-Programm zur Demonstration, wie man einen String mit strtok() aufteilt.
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;> }> |
>
>Ausgabe
Geeks for Geeks>
Beispiel 2: Programm, das die Verwendung der Funktion strtok() zum Tokenisieren einer Zeichenfolge basierend auf einem Trennzeichen demonstriert.
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);> }> |
>
>Ausgabe
Geeks for geeks Contribute>
Praktische Anwendung von strtok()
strtok() kann verwendet werden, um eine Zeichenfolge basierend auf einigen Trennzeichen in mehrere Zeichenfolgen aufzuteilen. A einfache CSV-Datei Die Unterstützung kann mit dieser Funktion implementiert werden. CSV-Dateien haben Kommas als Trennzeichen.
Beispiel 3: C-Programm zur Demonstration der Verwendung der Funktion strtok() in C zur Implementierung von a einfache CSV-Datei.
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);> }> |
>
>Ausgabe
1997, Ford, E350, ac, 3000.00,>
strtok_r() Funktion
Genau wie die Funktion strtok() in C übernimmt strtok_r() die gleiche Aufgabe, nämlich das Parsen einer Zeichenfolge in eine Folge von Tokens. strtok_r() ist eine wiedereintrittsfähige Version von strtok() und daher Thread-sicher.
Syntax von strtok_r()
char * strtok_r (char * str , const char * delim , char ** saveptr );>
Parameter
- str: Dies ist der Zeiger auf die Zeichenfolge, die tokenisiert werden soll. delims: Es ist eine Zeichenfolge, die alle Trennzeichen enthält. saveptr: Es handelt sich um einen Zeiger auf eine char *-Variable, die intern von strtok_r() verwendet wird, um den Kontext zwischen aufeinanderfolgenden Aufrufen aufrechtzuerhalten, die dieselbe Zeichenfolge analysieren.
Rückgabewert
- Es gibt den Zeiger auf das erste in der Zeichenfolge gefundene Token zurück.
- Es gibt NULL zurück, wenn keine weiteren Token gefunden werden.
Beispiele für strtok_r()
Beispiel 1: ein einfaches C-Programm, um die Verwendung von strtok_r() zu zeigen.
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);> }> |
>
>
Ausgabe
Geeks for Geeks>
Verschachtelte Tokenisierung in C
Beispiel 2: Das folgende C-Programm demonstriert die Verwendung der Funktion strtok_r() für die 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;> }> |
>
>
Ausgabe
Outer Token: Hello, World Inner Token: Hello Inner Token: World Outer Token: Geeks for Geeks Inner Token: Geeks Inner Token: for Inner Token: Geeks>
Unterschied zwischen strtok() und strtok_r()
Sehen wir uns die Unterschiede zwischen den Funktionen strtok() und strtok_r() in tabellarischer Form an, wie unten gezeigt:
| Ja Nein. | strtok() | strtok_r() |
|---|---|---|
| 1. | Es wird verwendet, um die Zeichenfolge str in eine Reihe von Token aufzuteilen. | Es wird verwendet, um eine Zeichenfolge in ein Muster für Token zu dekodieren. |
| 2. | Die Syntax lautet wie folgt: char *strtok(char *str, const char *delim) math.pow Java | Seine Syntax ist wie folgt: char *strtok_r(char *string, const char *limiter, char **context); |
| 3. | Zum Fortfahren wird das Trennzeichen verwendet. | Es handelt sich um eine neu eingegebene Variante von strtok(). |
| 4. | Es werden zwei Parameter benötigt. | Es benötigt drei Parameter. |
| 5. | Es gibt einen Zeiger auf das erste in der Zeichenfolge gefundene Token zurück. | Es gibt einen Zeiger auf das erste in der Zeichenfolge gefundene Token zurück. |
| 6. | Es ist nicht threadsicher. | Es ist threadsicher. |