Créer des fonctions de comparaison de chaînes en C

CCBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire (lab), vous apprendrez à créer et à implémenter des fonctions personnalisées de comparaison de chaînes de caractères en C. Le laboratoire couvre la compréhension de la fonction intégrée strcmp(), la mise en œuvre de la comparaison de chaînes à l'aide d'instructions conditionnelles, la gestion des comparaisons insensibles à la casse, la réalisation de multiples comparaisons de chaînes et l'application de la comparaison de chaînes dans un scénario du monde réel. À la fin de ce laboratoire, vous aurez une bonne compréhension des techniques de manipulation et de comparaison de chaînes en programmation C.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/ControlFlowGroup -.-> c/if_else("If...Else") c/CompoundTypesGroup -.-> c/strings("Strings") c/FunctionsGroup -.-> c/function_declaration("Function Declaration") c/FunctionsGroup -.-> c/function_parameters("Function Parameters") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/if_else -.-> lab-438244{{"Créer des fonctions de comparaison de chaînes en C"}} c/strings -.-> lab-438244{{"Créer des fonctions de comparaison de chaînes en C"}} c/function_declaration -.-> lab-438244{{"Créer des fonctions de comparaison de chaînes en C"}} c/function_parameters -.-> lab-438244{{"Créer des fonctions de comparaison de chaînes en C"}} c/user_input -.-> lab-438244{{"Créer des fonctions de comparaison de chaînes en C"}} c/output -.-> lab-438244{{"Créer des fonctions de comparaison de chaînes en C"}} end

Comprendre la fonction strcmp()

Dans cette étape, vous allez apprendre à propos de la fonction strcmp() en C, qui est utilisée pour comparer deux chaînes de caractères de manière lexicographique.

  1. Créez un nouveau fichier nommé string-compare.c dans le répertoire ~/project :
cd ~/project
touch string-compare.c
  1. Ouvrez le fichier dans WebIDE et ajoutez le code suivant :
#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "hello";
    char str2[] = "hello";
    char str3[] = "world";

    // Compare strings using strcmp()
    int result1 = strcmp(str1, str2);
    int result2 = strcmp(str1, str3);

    printf("Comparison between str1 and str2: %d\n", result1);
    printf("Comparison between str1 and str3: %d\n", result2);

    return 0;
}
  1. Compilez et exécutez le programme :
gcc string-compare.c -o string-compare
./string-compare

Exemple de sortie :

Comparison between str1 and str2: 0
Comparison between str1 and str3: -15

Analysons le fonctionnement de strcmp() :

  • Elle retourne 0 si les chaînes sont exactement identiques.
  • Elle retourne une valeur négative si la première chaîne est lexicographiquement inférieure à la deuxième.
  • Elle retourne une valeur positive si la première chaîne est lexicographiquement supérieure à la deuxième.

La fonction compare les chaînes caractère par caractère jusqu'à ce qu'elle trouve une différence ou atteigne la fin de l'une des chaînes.

Implémenter la comparaison de chaînes avec des instructions if-else

Dans cette étape, vous apprendrez à utiliser strcmp() avec des instructions conditionnelles pour prendre des décisions basées sur des comparaisons de chaînes de caractères.

  1. Créez un nouveau fichier nommé string-compare-conditional.c dans le répertoire ~/project :
cd ~/project
touch string-compare-conditional.c
  1. Ouvrez le fichier dans WebIDE et ajoutez le code suivant :
#include <stdio.h>
#include <string.h>

int main() {
    char username[50];
    char password[50];

    printf("Enter username: ");
    scanf("%s", username);

    printf("Enter password: ");
    scanf("%s", password);

    // Compare username and password using if-else
    if (strcmp(username, "admin") == 0) {
        if (strcmp(password, "secret") == 0) {
            printf("Login successful!\n");
        } else {
            printf("Incorrect password.\n");
        }
    } else {
        printf("Invalid username.\n");
    }

    return 0;
}
  1. Compilez et exécutez le programme :
gcc string-compare-conditional.c -o string-compare-conditional
./string-compare-conditional

Exemple d'interaction :

Enter username: admin
Enter password: secret
Login successful!

Enter username: user
Enter password: wrongpass
Invalid username.

Points clés de cet exemple :

  • strcmp() est utilisée à l'intérieur d'instructions if pour vérifier l'égalité de chaînes.
  • La fonction retourne 0 lorsque les chaînes correspondent exactement.
  • Des instructions if-else imbriquées permettent d'avoir une logique de comparaison de chaînes complexe.

Gérer les comparaisons insensibles à la casse

Dans cette étape, vous apprendrez à effectuer des comparaisons de chaînes de caractères insensibles à la casse en utilisant la fonction strcasecmp().

  1. Créez un nouveau fichier nommé case-insensitive-compare.c dans le répertoire ~/project :
cd ~/project
touch case-insensitive-compare.c
  1. Ouvrez le fichier dans WebIDE et ajoutez le code suivant :
#include <stdio.h>
#include <string.h>

int main() {
    char input[50];

    printf("Enter a color (Red/red/GREEN/green): ");
    scanf("%s", input);

    // Case-insensitive comparison
    if (strcasecmp(input, "red") == 0) {
        printf("You entered the color RED.\n");
    } else if (strcasecmp(input, "green") == 0) {
        printf("You entered the color GREEN.\n");
    } else if (strcasecmp(input, "blue") == 0) {
        printf("You entered the color BLUE.\n");
    } else {
        printf("Unknown color.\n");
    }

    return 0;
}
  1. Compilez le programme (notez que vous devrez peut-être utiliser le drapeau -std=gnu99) :
gcc case-insensitive-compare.c -o case-insensitive-compare
  1. Exécutez le programme :
./case-insensitive-compare

Exemples d'interactions :

Enter a color (Red/red/GREEN/green): RED
You entered the color RED.

Enter a color (Red/red/GREEN/green): green
You entered the color GREEN.

Points clés concernant les comparaisons insensibles à la casse :

  • strcasecmp() compare les chaînes de caractères en ignorant les différences de casse.
  • Elle fonctionne de manière similaire à strcmp(), mais est insensible à la casse.
  • Utile pour les entrées utilisateur où la casse ne devrait pas avoir d'importance.

Effectuer de multiples comparaisons de chaînes de caractères

Dans cette étape, vous apprendrez à effectuer de multiples comparaisons de chaînes de caractères en utilisant différentes techniques de comparaison.

  1. Créez un nouveau fichier nommé multiple-string-compare.c dans le répertoire ~/project :
cd ~/project
touch multiple-string-compare.c
  1. Ouvrez le fichier dans WebIDE et ajoutez le code suivant :
#include <stdio.h>
#include <string.h>

int main() {
    char input[3][50];
    int comparison_count = 0;

    // Input three strings
    for (int i = 0; i < 3; i++) {
        printf("Enter string %d: ", i + 1);
        scanf("%s", input[i]);
    }

    // Compare first two strings
    if (strcmp(input[0], input[1]) == 0) {
        printf("First two strings are identical.\n");
        comparison_count++;
    }

    // Compare last two strings
    if (strcmp(input[1], input[2]) == 0) {
        printf("Last two strings are identical.\n");
        comparison_count++;
    }

    // Compare first and last strings
    if (strcmp(input[0], input[2]) == 0) {
        printf("First and last strings are identical.\n");
        comparison_count++;
    }

    // Overall comparison summary
    printf("Total matching string pairs: %d\n", comparison_count);

    return 0;
}
  1. Compilez le programme :
gcc multiple-string-compare.c -o multiple-string-compare
  1. Exécutez le programme :
./multiple-string-compare

Exemples d'interactions :

Enter string 1: hello
Enter string 2: world
Enter string 3: hello
Total matching string pairs: 1

Points clés concernant les multiples comparaisons de chaînes de caractères :

  • Utilisez strcmp() pour comparer différentes combinaisons de chaînes de caractères.
  • Suivez le nombre de paires de chaînes de caractères correspondantes.
  • Démontrez une logique flexible de comparaison de chaînes de caractères.

Appliquer la comparaison de chaînes dans un scénario du monde réel

Dans cette étape, vous allez créer un simple système de gestion de mots de passe qui démontre des techniques pratiques de comparaison de chaînes de caractères.

  1. Créez un nouveau fichier nommé password-manager.c dans le répertoire ~/project :
cd ~/project
touch password-manager.c
  1. Ouvrez le fichier dans WebIDE et ajoutez le code suivant :
#include <stdio.h>
#include <string.h>

#define MAX_USERS 3
#define MAX_USERNAME 50
#define MAX_PASSWORD 50

// User structure to store credentials
struct User {
    char username[MAX_USERNAME];
    char password[MAX_PASSWORD];
    char role[20];
};

int main() {
    // Predefined user database
    struct User users[MAX_USERS] = {
        {"admin", "admin123", "administrator"},
        {"manager", "manager456", "manager"},
        {"user", "user789", "regular"}
    };

    char input_username[MAX_USERNAME];
    char input_password[MAX_PASSWORD];
    int login_success = 0;

    printf("=== Simple Password Management System ===\n");
    printf("Enter username: ");
    scanf("%s", input_username);

    printf("Enter password: ");
    scanf("%s", input_password);

    // Authenticate user with string comparison
    for (int i = 0; i < MAX_USERS; i++) {
        if (strcmp(users[i].username, input_username) == 0) {
            if (strcmp(users[i].password, input_password) == 0) {
                printf("Login Successful!\n");
                printf("Role: %s\n", users[i].role);
                login_success = 1;
                break;
            }
        }
    }

    if (!login_success) {
        printf("Login Failed. Invalid username or password.\n");
    }

    return 0;
}
  1. Compilez le programme :
gcc password-manager.c -o password-manager
  1. Exécutez le programme :
./password-manager

Exemples d'interactions :

=== Simple Password Management System ===
Enter username: admin
Enter password: admin123
Login Successful!
Role: administrator

Enter username: user
Enter password: wrongpassword
Login Failed. Invalid username or password.

Points clés concernant ce scénario du monde réel :

  • Utilise strcmp() pour une vérification sécurisée des identifiants.
  • Démontre une application pratique de la comparaison de chaînes de caractères.
  • Met en œuvre un simple système d'authentification.
  • Montre comment comparer les identifiants de plusieurs utilisateurs.

Résumé

Dans ce laboratoire, vous avez appris à propos de la fonction strcmp() en C, qui est utilisée pour comparer deux chaînes de caractères de manière lexicographique. Vous avez implémenté la comparaison de chaînes en utilisant strcmp() et des instructions conditionnelles pour prendre des décisions basées sur les résultats de la comparaison. Vous avez également appris à gérer les comparaisons insensibles à la casse et à effectuer de multiples comparaisons de chaînes. Enfin, vous avez appliqué la comparaison de chaînes dans un scénario du monde réel impliquant l'authentification d'utilisateurs.

Les principaux points d'apprentissage de ce laboratoire incluent la compréhension de la fonction strcmp(), la mise en œuvre de la comparaison de chaînes avec des instructions if-else, la gestion des comparaisons insensibles à la casse et l'application de la comparaison de chaînes dans une application pratique.