Comment comparer deux chaînes de caractères en ignorant l'affaire en C++

Jinku Hu 12 octobre 2023
  1. Utiliser la fonction strcasecmp pour comparer deux chaînes de caractères en ignorant la casse
  2. Utilisez la fonction strncasecmp pour comparer deux chaînes de caractères en ignorant la casse
  3. Utiliser la fonction personnalisée toLower et l’opérateur == pour comparer deux chaînes de caractères en ignorant la casse
Comment comparer deux chaînes de caractères en ignorant l'affaire en C++

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!
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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 Facebook

Article connexe - C++ String