Verwendung der Funktion strtok in C
-
Verwendung der Funktion
strtok
zur Tokenisierung von Strings mit gegebenem Delimiter -
Funktion
strtok_r
zur Tokenisierung einer Zeichenkette mit zwei Trennzeichen verwenden
Dieser Artikel demonstriert mehrere Methoden zur Verwendung der Funktion strtok
in C.
Verwendung der Funktion strtok
zur Tokenisierung von Strings mit gegebenem Delimiter
Die Funktion strtok
ist Teil der C-Standardbibliothek, die in der Header-Datei <string.h>
definiert ist. Sie zerlegt die angegebene Zeichenkette in Token, die durch das angegebene Begrenzungszeichen getrennt sind. strtok
nimmt zwei Argumente entgegen - einen Zeiger auf die zu tokenisierende Zeichenkette als ersten Parameter und den Begrenzer-String als zweiten. Beachten Sie, dass die BegrenzungsZeichenkette als eine Reihe von Zeichen verarbeitet wird, die das separate Begrenzungszeichen bezeichnen. Die Funktion gibt den Zeiger auf eine null-terminierte Zeichenkette zurück, die das nächste Token darstellt. Beachten Sie jedoch, wenn dieselbe Zeichenkette mit mehreren strtok
-Aufrufen geparst wird, muss das erste Zeigerargument nach dem ersten Funktionsaufruf NULL
sein.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *str1, *token;
int j;
if (argc != 3) {
fprintf(stderr, "Usage: %s string delim\n", argv[0]);
exit(EXIT_FAILURE);
}
for (j = 1, str1 = argv[1];; j++, str1 = NULL) {
token = strtok(str1, argv[2]);
if (token == NULL) break;
printf("%d: %s\n", j, token);
}
exit(EXIT_SUCCESS);
}
Beispiel-Befehl:
./program "Temporary string to be parsed" " "
Ausgabe:
1: Temporary
2: string
3: to
4: be
5: parsed
Funktion strtok_r
zur Tokenisierung einer Zeichenkette mit zwei Trennzeichen verwenden
Alternativ steht eine weitere Version der Funktion namens strtok_r
zur Verfügung, bei der es sich um eine ablaufinvariante Variante handelt, die besser für Multithreading-Programme geeignet ist. Beide Funktionen modifizieren die als erstes Argument übergebene Zeichenkette, und sie können nicht auf konstante Zeichenketten angewendet werden. Der folgende Beispielcode tokenisiert die gegebene Zeichenkette in eine zweistufige Hierarchie. Die erste besteht aus Token, die an den als zweites Argument übergebenen Begrenzungszeichen aufgeteilt werden. Die innere Schleife teilt jedes Token aus der anfänglichen Tokenisierung auf, und schließlich gibt das Programm die Ergebnisse auf der Konsole aus.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *str1, *str2, *token, *subtoken;
char *saveptr1, *saveptr2;
int j;
if (argc != 4) {
fprintf(stderr, "Usage: %s string delim subdelim\n", argv[0]);
exit(EXIT_FAILURE);
}
for (j = 1, str1 = argv[1];; j++, str1 = NULL) {
token = strtok_r(str1, argv[2], &saveptr1);
if (token == NULL) break;
printf("%d: %s\n", j, token);
for (str2 = token;; str2 = NULL) {
subtoken = strtok_r(str2, argv[3], &saveptr2);
if (subtoken == NULL) break;
printf(" --> %s\n", subtoken);
}
}
exit(EXIT_SUCCESS);
}
Beispiel-Befehl:
./program "Temporary string to be parsed" " " "aeio"
Ausgabe:
1: Temporary
--> T
--> mp
--> r
--> ry
2: string
--> str
--> ng
3: to
--> t
4: be
--> b
5: parsed
--> p
--> rs
--> d
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook