Comment comparer deux chaînes de caractères en ignorant l'affaire en C++
-
Utiliser la fonction
strcasecmp
pour comparer deux chaînes de caractères en ignorant la casse -
Utilisez la fonction
strncasecmp
pour comparer deux chaînes de caractères en ignorant la casse -
Utiliser la fonction personnalisée
toLower
et l’opérateur==
pour comparer deux chaînes de caractères en ignorant la casse
Cet article présentera plusieurs méthodes permettant de comparer deux chaînes de caractères en ignorant le cas des lettres en C++.
Utiliser la fonction strcasecmp
pour comparer deux chaînes de caractères en ignorant la casse
Strcasecmp est la fonction de la bibliothèque standard C qui peut être incluse dans le fichier source C++ en utilisant l’en-tête <cstring>
. La fonction elle-même fonctionne sur une base octet par octet et retourne un entier inférieur, égal ou supérieur à 0, selon l’évaluation des chaînes correspondantes.
À savoir, si les deux chaînes ignorées la casse sont égales, la valeur de retour est zéro. Dans d’autres scénarios, lorsque les premiers caractères différents sont trouvés, ils sont comparés avec les valeurs à leur position dans l’alphabet, et le résultat correspondant est renvoyé.
#include <cstring>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
string text1 = "Hey! Mr. Tambourine man, play a song for me";
string text2 = "hey! Mr. Tambourine man, PLAY a song for me";
string text3 = "Hey! Mrs. Tambourine man, play a song for me";
if (strcasecmp(text1.c_str(), text2.c_str()) == 0) {
cout << "strings: text1 and text2 match." << endl;
} else {
cout << "strings: text1 and text2 don't match!" << endl;
}
if (strcasecmp(text1.c_str(), text3.c_str()) == 0) {
cout << "strings: text1 and text3 match." << endl;
} else {
cout << "strings: text1 and text3 don't match!" << endl;
}
return EXIT_SUCCESS;
}
Production :
strings: text1 and text2 match.
strings: text1 and text3 don't match!
Utilisez la fonction strncasecmp
pour comparer deux chaînes de caractères en ignorant la casse
Strncasecmp est une autre variation de la fonction ci-dessus qui peut être utilisée pour comparer un nombre donné de caractères de deux chaînes de caractères en ignorant la casse. La fonction prend la valeur entière du nombre maximum de caractères à comparer à partir du premier caractère
. L’exemple suivant montre comment comparer les 5 premiers caractères de deux chaînes de caractères en ignorant la casse.
#include <cstring>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
constexpr int BYTES_TO_COMPARE = 5;
int main() {
string text1 = "Hey! Mr. Tambourine man, play a song for me";
string text3 = "hey! Mrs. Tambourine man, PLAY a song for me";
if (strncasecmp(text1.c_str(), text3.c_str(), BYTES_TO_COMPARE) == 0) {
printf("The first %d characters of strings: text1 and text3 match.\n",
BYTES_TO_COMPARE);
}
return EXIT_SUCCESS;
}
Production :
The first 5 characters of strings: text1 and text3 match.
Utiliser la fonction personnalisée toLower
et l’opérateur ==
pour comparer deux chaînes de caractères en ignorant la casse
Nous pouvons aussi convertir des chaînes de caractères dans la même casse et utiliser un simple opérateur ==
pour la comparaison. Comme choix arbitraire, cet exemple propose l’abaissement des deux chaînes avec une fonction définie par l’utilisateur, qui retourne l’objet string
. Enfin, l’instruction if
peut contenir l’expression de comparaison.
#include <cstring>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
std::string toLower(std::string s) {
std::transform(s.begin(), s.end(), s.begin(),
[](unsigned char c) { return std::tolower(c); });
return s;
}
int main() {
string text1 = "Hey! Mr. Tambourine man, play a song for me";
string text2 = "Hey! Mr. Tambourine man, play a song for me";
string text3 = "Hey! Mrs. Tambourine man, play a song for me";
if (toLower(text1) == toLower(text2)) {
cout << "strings: text1 and text2 match." << endl;
} else {
cout << "strings: text1 and text2 don't match!" << endl;
}
if (toLower(text1) == toLower(text3)) {
cout << "strings: text1 and text3 match." << endl;
} else {
cout << "strings: text1 and text3 don't match!" << endl;
}
return EXIT_SUCCESS;
}
Production :
strings: text1 and text2 match.
strings: text1 and text3 don't match!
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 FacebookArticle connexe - C++ String
- Comparaison de chaîne et de caractère en C++
- Supprimer le dernier caractère d'une chaîne en C++
- Obtenir le dernier caractère d'une chaîne en C++
- Différences entre l'opérateur sizeof et la fonction strlen pour les chaînes en C++
- Effacer la chaîne en C++
- Imprimer toutes les permutations de la chaîne en C++