0Pricing
C Academy · Leçon

strcmp et comparaison

Comparez des chaînes

strcmp et comparaison est une leçon C Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C Academy comprend 4 leçons au total.

Comparer des chaînes

Vous ne pouvez pas comparer des chaînes avec == en C. Cela compare uniquement les adresses de deux tableaux, et non leur contenu.

Utilisez strcmp(a, b) de <string.h> pour comparer les caractères un à un.

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

int main(void) {
    char a[] = "apple";
    char b[] = "apple";
    if (strcmp(a, b) == 0)
        printf("Strings are equal\n");
    return 0;
}

Valeur renvoyée par strcmp

strcmp renvoie un int :

  • 0 si les chaînes sont égales
  • une valeur négative si le premier char différent dans a est inférieur à celui de b
  • une valeur positive dans les autres cas
#include <stdio.h>
#include <string.h>

int main(void) {
    printf("%d\n", strcmp("abc", "abc"));
    printf("%d\n", strcmp("abc", "abd"));
    printf("%d\n", strcmp("abd", "abc"));
    return 0;
}

Le piège du zéro égal

Un bogue courant consiste à écrire if (strcmp(a, b)) en pensant que cela signifie « égal ».

N’oubliez pas que strcmp renvoie 0 (faux) lorsque les chaînes sont égales ; cette condition est donc vraie lorsqu’elles diffèrent. Comparez toujours explicitement avec 0.

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

int main(void) {
    char input[] = "yes";
    if (strcmp(input, "yes") == 0)
        printf("Confirmed\n");
    else
        printf("Not confirmed\n");
    return 0;
}

Fonctionnement de la comparaison

strcmp compare les valeurs ASCII (octet) des caractères un par un jusqu’à ce qu’ils diffèrent ou qu’un terminateur soit atteint.

Les lettres majuscules (A=65) viennent avant les minuscules (a=97), donc "Zebra" est classée avant "apple".

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

int main(void) {
    printf("%d\n", strcmp("Zebra", "apple"));
    return 0;
}

Ordre lexicographique

Le signe du résultat de strcmp vous permet de trier les chaînes par ordre alphabétique. Un résultat négatif signifie que le premier argument vient plus tôt dans l’ordre du dictionnaire.

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

int main(void) {
    const char *x = "banana";
    const char *y = "cherry";
    if (strcmp(x, y) < 0)
        printf("%s comes before %s\n", x, y);
    return 0;
}

strncmp : comparaison limitée

strncmp(a, b, n) compare au plus n caractères. Cela est utile pour vérifier les préfixes.

Par exemple, pour vérifier si une chaîne commence par "http".

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

int main(void) {
    char url[] = "https://site.com";
    if (strncmp(url, "https", 5) == 0)
        printf("Secure URL\n");
    return 0;
}

Comparaison insensible à la casse

strcmp standard est sensible à la casse. Pour l’ignorer, vous pouvez convertir les caractères avec tolower de <ctype.h> pendant la comparaison.

(Les systèmes POSIX proposent également strcasecmp, mais cette fonction ne fait pas partie de la norme C.)

#include <stdio.h>
#include <ctype.h>

int ci_cmp(const char *a, const char *b) {
    while (*a && (tolower(*a) == tolower(*b))) { a++; b++; }
    return tolower(*a) - tolower(*b);
}

int main(void) {
    printf("%d\n", ci_cmp("Hello", "hello"));
    return 0;
}

Rechercher avec une comparaison

Vous pouvez parcourir un tableau de chaînes et utiliser strcmp pour trouver une correspondance, comme dans une simple table de recherche.

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

int main(void) {
    const char *fruits[] = {"apple", "banana", "cherry"};
    const char *target = "banana";
    for (int i = 0; i < 3; i++) {
        if (strcmp(fruits[i], target) == 0) {
            printf("Found at index %d\n", i);
        }
    }
    return 0;
}

Trier des chaînes

En utilisant strcmp comme moteur, vous pouvez trier des tableaux de chaînes. Voici un petit tri à bulles qui échange les pointeurs selon leur ordre.

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

int main(void) {
    const char *names[] = {"Carol", "Alice", "Bob"};
    int n = 3;
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - 1 - i; j++)
            if (strcmp(names[j], names[j+1]) > 0) {
                const char *t = names[j];
                names[j] = names[j+1];
                names[j+1] = t;
            }
    for (int i = 0; i < n; i++) printf("%s\n", names[i]);
    return 0;
}

Ne comparez pas directement par soustraction

Vous pourriez essayer d’écrire votre propre comparaison avec a[i] - b[i], mais avec des valeurs char brutes, le comportement du signe dépend de l’implémentation et peut provoquer un dépassement.

Préférez la bibliothèque strcmp, qui gère correctement ces cas limites.

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

int main(void) {
    int r = strcmp("file1", "file2");
    printf("Result sign: %s\n", r < 0 ? "negative" : "non-negative");
    return 0;
}

Comparer une saisie utilisateur

Un cas d’utilisation concret consiste à vérifier un mot de passe ou un choix de menu. Lisez l’entrée, puis comparez-la aux valeurs attendues avec strcmp.

Comparez toujours avec 0 pour vérifier l’égalité.

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

int main(void) {
    char choice[] = "quit";
    if (strcmp(choice, "quit") == 0)
        printf("Exiting program\n");
    return 0;
}

Vérification rapide

Vérifiez votre compréhension des valeurs renvoyées par strcmp.

Récapitulatif

Vous avez appris à comparer des chaînes en C :

  • strcmp renvoie 0 pour l’égalité, une valeur négative ou positive pour l’ordre.
  • N’utilisez jamais == sur des chaînes ; cela compare les adresses.
  • Testez toujours == 0 pour vérifier l’égalité (le piège du zéro considéré comme faux).
  • strncmp compare un préfixe ; l’insensibilité à la casse nécessite tolower.

Questions Fréquemment Posées

La leçon « strcmp et comparaison » est-elle gratuite ?

Oui — le texte complet de « strcmp et comparaison » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C Academy, passe à CoddyKit PRO. Le cours C Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « strcmp et comparaison » ?

Comparez des chaînes Tu pratiques C Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C Academy ?

Aucune expérience préalable n'est requise. C Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « strcmp et comparaison » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C Academy ?

Oui. Chaque leçon C Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. strlen, strcpy, strcat
  2. strcmp et comparaison
  3. strtok et tokenisation
  4. memcpy et memset
← Retour à C Academy