HOWTO · C

Verwendung der Funktion strtok in C

Dieser Artikel beschreibt die Verwendung der Funktion strtok in C

Auf dieser Seite

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