Verwendung der Funktion strtok in C

Jinku Hu 12 Oktober 2023
  1. Verwendung der Funktion strtok zur Tokenisierung von Strings mit gegebenem Delimiter
  2. Funktion strtok_r zur Tokenisierung einer Zeichenkette mit zwei Trennzeichen verwenden
Verwendung der Funktion strtok in C

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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Verwandter Artikel - C String