3 façons de comparer des chaînes en C++

3 Façons de comparer des chaînes en C++

En C++, comparer des chaînes est une tâche essentielle pour diverses applications telles que le tri, la recherche et la validation d’entrées. Cet article explore trois méthodes efficaces pour comparer des chaînes en C++ : l’opérateur de comparaison, la fonction strcmp() et la fonction string::compare().

L’opérateur de comparaison

L’opérateur de comparaison == peut être utilisé pour comparer deux chaînes. Il renvoie true si les deux chaînes sont égales, et false sinon. Cependant, il est important de noter que l’opérateur de comparaison est sensible à la casse.

cpp
#include <iostream>
#include <string>

int main() {
std::string str1 = "Bonjour";
std::string str2 = "bonjour";

if (str1 == str2) {
std::cout << "Les deux chaînes sont égales" << std::endl;
} else {
std::cout << "Les deux chaînes sont différentes" << std::endl;
}

return 0;
}

Résultat :


Les deux chaînes sont différentes

La fonction strcmp()

La fonction strcmp() de la bibliothèque standard C compare deux chaînes. Elle renvoie un entier positif si la première chaîne est lexicographiquement plus grande que la seconde, un entier négatif si la première chaîne est lexicographiquement plus petite que la seconde, et zéro si les deux chaînes sont égales. La fonction strcmp() n’est pas sensible à la casse.

cpp
#include <cstring>
#include <iostream>

int main() {
char str1[] = "Bonjour";
char str2[] = "bonjour";

int result = strcmp(str1, str2);

if (result > 0) {
std::cout << "La première chaîne est lexicographiquement plus grande que la seconde" << std::endl;
} else if (result < 0) {
std::cout << "La première chaîne est lexicographiquement plus petite que la seconde" << std::endl;
} else {
std::cout << "Les deux chaînes sont égales" << std::endl;
}

return 0;
}

Résultat :


Les deux chaînes sont égales

La fonction string::compare()

La fonction string::compare() de la bibliothèque standard C++ compare deux chaînes. Elle renvoie un entier positif si la première chaîne est lexicographiquement plus grande que la seconde, un entier négatif si la première chaîne est lexicographiquement plus petite que la seconde, et zéro si les deux chaînes sont égales. La fonction string::compare() n’est pas sensible à la casse.

cpp
#include <iostream>
#include <string>

int main() {
std::string str1 = "Bonjour";
std::string str2 = "bonjour";

int result = str1.compare(str2);

if (result > 0) {
std::cout << "La première chaîne est lexicographiquement plus grande que la seconde" << std::endl;
} else if (result < 0) {
std::cout << "La première chaîne est lexicographiquement plus petite que la seconde" << std::endl;
} else {
std::cout << "Les deux chaînes sont égales" << std::endl;
}

return 0;
}

Résultat :


Les deux chaînes sont égales

Conclusion

Cet article a présenté trois méthodes efficaces pour comparer des chaînes en C++ : l’opérateur de comparaison, la fonction strcmp() et la fonction string::compare(). Chaque méthode a ses propres avantages et inconvénients. L’opérateur de comparaison est simple à utiliser, mais il est sensible à la casse. La fonction strcmp() est plus générale, mais elle n’est pas non plus sensible à la casse. La fonction string::compare() est la plus complète, car elle est sensible à la casse et offre des fonctionnalités supplémentaires telles que la comparaison partielle.

Foire aux questions (FAQ)

Q : Quelle méthode de comparaison de chaînes est la plus efficace ?
R : Cela dépend des exigences spécifiques de l’application. L’opérateur de comparaison est le plus simple et le plus rapide, mais il n’est pas sensible à la casse. La fonction strcmp() est plus générale, mais elle n’est pas non plus sensible à la casse. La fonction string::compare() est la plus complète, mais elle peut être plus lente que les autres méthodes.

Q : Comment comparer des chaînes en ignorant la casse ?
R : Vous pouvez utiliser la fonction strcasecmp() pour comparer des chaînes en ignorant la casse.

Q : Comment comparer deux chaînes de tailles différentes ?
R : Vous pouvez utiliser la fonction strncmp() pour comparer deux chaînes de tailles différentes.

Q : Comment comparer des chaînes contenant des caractères spéciaux ?
R : Vous devez échapper les caractères spéciaux avant de comparer les chaînes.

Q : Comment comparer des chaînes en ignorant les espaces blancs ?
R : Vous pouvez utiliser la fonction isspace() pour identifier les espaces blancs et les ignorer lors de la comparaison.

Q : Comment comparer des chaînes en ignorant les accents ?
R : Vous pouvez utiliser la bibliothèque ICU pour comparer des chaînes en ignorant les accents.

Q : Comment comparer des chaînes contenant des caractères Unicode ?
R : Vous pouvez utiliser la fonction wstrcmp() pour comparer des chaînes contenant des caractères Unicode.

Q : Comment comparer des chaînes à l’aide d’une expression régulière ?
R : Vous pouvez utiliser la bibliothèque Boost.Regex pour comparer des chaînes à l’aide d’une expression régulière.

Q : Comment comparer des chaînes contenant des lignes de nouvelle ligne ?
R : Vous pouvez utiliser la fonction strcmp() avec l’option \n pour comparer des chaînes contenant des lignes de nouvelle ligne.