Vérifiez si la chaîne contient une sous-chaîne en C

Jinku Hu 12 octobre 2023
  1. Utilisez la fonction strstr pour vérifier si une chaîne contient une sous-chaîne en C
  2. Utilisez la fonction strcasestr pour vérifier si une chaîne contient une sous-chaîne
  3. Utilisez la fonction strncpy pour copier une sous-chaîne
Vérifiez si la chaîne contient une sous-chaîne en C

Cet article explique plusieurs méthodes permettant de vérifier si une chaîne de caractères contient une sous-chaîne donnée en C.

Utilisez la fonction strstr pour vérifier si une chaîne contient une sous-chaîne en C

La fonction strstr fait partie des facilités de chaînes de la bibliothèque standard du C, et elle est définie dans l’en-tête <string.h>. La fonction prend deux arguments de pointeur char, le premier indiquant la chaîne à rechercher et l’autre indiquant la chaîne à rechercher. Elle trouve la première adresse de départ de la sous-chaîne donnée et renvoie le pointeur correspondant à char. Si la sous-chaîne n’est pas trouvée dans la première chaîne d’arguments, le pointeur NULL est renvoyé.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *ret;

  ret = strstr(tmp, "literal");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

Production :

found substring at address 0x55edd2ecc014

Utilisez la fonction strcasestr pour vérifier si une chaîne contient une sous-chaîne

strcasestr ne fait pas partie des fonctionnalités standard de la bibliothèque, mais il est implémenté comme une extension dans la bibliothèque C de GNU, qui peut être indiquée avec la définition de la macro _GNU_SOURCE. Une fois définie, nous pouvons appeler la fonction strcasestr pour trouver la première occurrence de la sous-chaîne donnée. Mais attention, cette fonction ignore le cas des deux chaînes de caractères.

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *ret;

  ret = strcasestr(tmp, "LITERAL");
  if (ret)
    printf("found substring at address %p\n", ret);
  else
    printf("no substring found!\n");

  exit(EXIT_SUCCESS);
}

Production :

found substring at address 0x55edd2ecc014

Utilisez la fonction strncpy pour copier une sous-chaîne

On peut aussi copier la sous-chaîne donnée dans un nouveau tampon en utilisant la fonction strncpy. Il faut trois arguments, dont le premier est le pointeur de destination char où la sous-chaîne copiée sera stockée. Le deuxième argument est la chaîne source, et le dernier argument indique le premier nombre d’octets à copier au maximum. Notez que si l’octet nul n’est pas trouvé dans les premiers octets de la chaîne source, la chaîne de destination ne sera pas terminée par un zéro.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", strncpy(str, tmp, 4));
  printf("%s\n", strncpy(str, tmp + 5, 10));

  free(str);
  exit(EXIT_SUCCESS);
}

Production :

This
string lit
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