Comparer les chaînes de caractères en C

Jinku Hu 12 octobre 2023
  1. Utiliser la fonction strcmp pour comparer des chaînes de caractères
  2. Utilisez la fonction strncmp pour comparer seulement certaines parties de chaînes de caractères
  3. Utilisez les fonctions strcasecmp et strncasecmp pour comparer des chaînes de caractères en ignorant la casse des lettres
Comparer les chaînes de caractères en C

Cet article présente de multiples méthodes pour comparer les chaînes de caractères en C.

Utiliser la fonction strcmp pour comparer des chaînes de caractères

La fonction strcmp est la fonction standard de la bibliothèque définie dans l’en-tête <string.h>. Les chaînes de style C sont juste des séquences de caractères terminées par le symbole \0, donc la fonction devrait comparer chaque caractère avec l’itération.

strcmp prend deux chaînes de caractères et renvoie l’entier pour indiquer le résultat de la comparaison. Le nombre renvoyé est négatif si la première chaîne est lexicographiquement inférieure à la seconde, ou positif si la seconde est inférieure à la première, ou 0 si les deux chaînes sont identiques.

Notez que, dans l’exemple suivant, nous inversons la valeur de retour de la fonction et l’insérons dans l’instruction conditionnelle ?: pour imprimer la sortie correspondante à la console.

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

int main() {
  const char* str1 = "hello there 1";
  const char* str2 = "hello there 2";
  const char* str3 = "Hello there 2";

  !strcmp(str1, str2) ? printf("strings are equal\n")
                      : printf("strings are not equal\n");

  !strcmp(str1, str3) ? printf("strings are equal\n")
                      : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Production :

strings are not equal
strings are not equal

Utilisez la fonction strncmp pour comparer seulement certaines parties de chaînes de caractères

strncmp est une autre fonction utile définie dans l’en-tête <string.h>, et elle peut être utilisée pour comparer seulement plusieurs caractères du début des chaînes.

strncmp prend le troisième argument de type entier pour spécifier le nombre de caractères à comparer dans les deux chaînes. Les valeurs de retour de la fonction sont similaires à celles renvoyées par la strcmp.

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

int main() {
  const char* str1 = "hello there 1";
  const char* str2 = "hello there 2";

  !strncmp(str1, str2, 5) ? printf("strings are equal\n")
                          : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Production :

strings are equal

Utilisez les fonctions strcasecmp et strncasecmp pour comparer des chaînes de caractères en ignorant la casse des lettres

La fonction strcasecmp se comporte de la même manière que la fonction strcmp, sauf qu’elle ignore la casse des lettres. Cette fonction est compatible POSIX et peut être utilisée sur plusieurs systèmes d’exploitation avec strncasecmp, qui implémente la comparaison insensible à la casse sur un certain nombre de caractères dans les deux chaînes. Ce dernier paramètre peut être passé à la fonction avec le troisième argument de type size_t.

Notez que les valeurs de retour de ces fonctions peuvent être utilisées directement dans les déclarations conditionnelles.

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

int main() {
  const char* str1 = "hello there 2";
  const char* str3 = "Hello there 2";

  !strcasecmp(str1, str3) ? printf("strings are equal\n")
                          : printf("strings are not equal\n");

  !strncasecmp(str1, str3, 5) ? printf("strings are equal\n")
                              : printf("strings are not equal\n");

  exit(EXIT_SUCCESS);
}

Production :

strings are equal
strings are equal
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