Utiliser la fonction strtok en C

Jinku Hu 12 octobre 2023
  1. Utiliser la fonction strtok pour marquer une chaîne de caractères avec un délimiteur donné
  2. Utilisez la fonction strtok_r pour marquer une chaîne avec deux délimiteurs
Utiliser la fonction strtok en C

Cet article présente plusieurs méthodes d’utilisation de la fonction strtok en C.

Utiliser la fonction strtok pour marquer une chaîne de caractères avec un délimiteur donné

La fonction strtok fait partie de la bibliothèque standard C définie dans le fichier d’en-tête <string.h>. Elle décompose la chaîne de caractères donnée en jetons séparés par le délimiteur spécifié. La fonction strtok prend deux arguments - un pointeur vers la chaîne à découper comme premier paramètre et la chaîne du délimiteur comme second. Notez que, la chaîne de délimitation est traitée comme un ensemble de caractères, indiquant le délimiteur séparé. La fonction renvoie le pointeur à une chaîne de caractères à terminaison nulle, qui représente le jeton suivant. Attention cependant, lorsque la même chaîne est analysée avec plusieurs appels strtok, le premier argument du pointeur doit être NULL après l’appel initial de la fonction.

#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);
}

Exemple de commande :

./program "Temporary string to be parsed" " "

Production :

1: Temporary
2: string
3: to
4: be
5: parsed

Utilisez la fonction strtok_r pour marquer une chaîne avec deux délimiteurs

Une autre version de la fonction est disponible, appelée strtok_r, qui est une variante réentrante mieux adaptée aux programmes multi-threads. Ces deux fonctions modifient la chaîne passée en premier argument, et elles ne peuvent pas être sur des chaînes constantes. L’exemple de code suivant transforme la chaîne donnée en une hiérarchie à deux niveaux. Le premier est constitué de jetons répartis sur les délimiteurs passés en second argument au programme. La boucle interne divise chaque jeton à partir de la tokenisation initiale, et finalement, le programme sort les résultats sur la console.

#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);
}

Exemple de commande :

./program "Temporary string to be parsed" " " "aeio"

Production:

1: Temporary
 --> T
 --> mp
 --> r
 --> ry
2: string
 --> str
 --> ng
3: to
 --> t
4: be
 --> b
5: parsed
 --> p
 --> rs
 --> d
Auteur: 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

Article connexe - C String