Utilisation de strcmp()
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 18 sur 63.
Vous avez appris comment concaténer des chaînes de caractères avec strcat(), mais que faire si vous devez déterminer si deux chaînes contiennent exactement le même texte ? En C, vous ne pouvez pas utiliser l'opérateur d'égalité (==) pour comparer des chaînes car il compare uniquement les adresses mémoire, et non le contenu réel.
La fonction strcmp() de la bibliothèque <string.h> résout ce problème en comparant deux chaînes de caractères caractère par caractère. Elle effectue ce qu'on appelle une comparaison lexicographique - comparant essentiellement les chaînes dans l'ordre du dictionnaire.
#include <stdio.h>
#include <string.h>
char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2); // Retourne 0 (les chaînes sont égales)La fonction strcmp() retourne trois types de valeurs différents : elle retourne 0 si les chaînes sont identiques, une valeur négative si la première chaîne précède la seconde par ordre alphabétique, et une valeur positive si la première chaîne suit la seconde par ordre alphabétique.
Cette fonction est essentielle pour prendre des décisions basées sur le contenu d'une chaîne de caractères, telles que la validation des entrées utilisateur, le tri des données textuelles ou l'implémentation de fonctionnalités de recherche dans vos programmes.
Défi
FacileÉcrivez un programme C qui implémente un système simple de vérification de mot de passe en utilisant la fonction strcmp(). Votre programme doit :
- Lire un entier
nreprésentant le nombre de tentatives de connexion à traiter - Pour chaque tentative de connexion :
- Lire un nom d'utilisateur (username) depuis l'entrée
- Lire un mot de passe (password) depuis l'entrée
- Utiliser
strcmp()pour comparer le nom d'utilisateur avec "admin" - Utiliser
strcmp()pour comparer le mot de passe avec "secret123" - Afficher le message approprié en fonction des résultats de la comparaison
- Après avoir traité toutes les tentatives, compter et afficher le nombre de connexions réussies
La logique de validation de la connexion doit être :
- Si le nom d'utilisateur et le mot de passe sont tous deux corrects : afficher "Login successful"
- Si le nom d'utilisateur est correct mais le mot de passe est incorrect : afficher "Invalid password"
- Si le nom d'utilisateur est incorrect mais le mot de passe est correct : afficher "Invalid username"
- Si le nom d'utilisateur et le mot de passe sont tous deux incorrects : afficher "Invalid credentials"
N'oubliez pas d'inclure l'en-tête <string.h> pour utiliser la fonction strcmp().
Votre sortie doit afficher les résultats au format suivant :
[Login result message]
[Login result message]
...
Total successful logins: [count]Par exemple, si l'entrée est :
4
admin
secret123
user
password
admin
wrong
guest
secret123Votre sortie doit être :
Login successful
Invalid credentials
Invalid password
Invalid username
Total successful logins: 1Ce défi teste votre compréhension de l'utilisation de strcmp() pour comparer l'égalité de chaînes de caractères, de l'implémentation d'une logique conditionnelle basée sur les résultats de comparaison de chaînes, et du comptage d'occurrences basé sur les résultats de comparaison.
Aide-mémoire
La fonction strcmp() de <string.h> compare deux chaînes de caractères caractère par caractère en utilisant une comparaison lexicographique :
#include <string.h>
char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2);strcmp() retourne :
0si les chaînes sont identiques- Une valeur négative si la première chaîne vient avant la deuxième par ordre alphabétique
- Une valeur positive si la première chaîne vient après la deuxième par ordre alphabétique
On ne peut pas utiliser == pour comparer des chaînes en C car cela compare uniquement les adresses mémoire, pas le contenu.
Essayez vous-même
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char username[100];
char password[100];
int successful_logins = 0;
// TODO: Écrivez votre code ici
// Traiter chaque tentative de connexion en utilisant la fonction strcmp()
// Comparer le nom d'utilisateur avec "admin" et le mot de passe avec "secret123"
// Afficher les messages appropriés et compter les connexions réussies
printf("Total successful logins: %d\n", successful_logins);
return 0;
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînes