2024-04-18 10:40 Temps de lecture : 8 min

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

Méthodes de comparaison de chaînes de caractères en C++

La manipulation des chaînes est une action fondamentale en C++, notamment pour le tri, la recherche ou la validation de données. Dans cet article, nous allons explorer en détail trois approches distinctes pour comparer des chaînes : l'utilisation de l'opérateur de comparaison, l'appel à la fonction strcmp() et l'exploitation de la méthode string::compare().

L'opérateur de comparaison (==)

L'opérateur == offre une méthode directe pour évaluer l'égalité entre deux chaînes de caractères. Il retourne true si les chaînes sont identiques, et false dans le cas contraire. Cependant, il est crucial de noter que cette comparaison est sensible à la casse.


 #include <iostream>
 #include <string>

 int main() {
  std::string chaine1 = "Bonjour";
  std::string chaine2 = "bonjour";

  if (chaine1 == chaine2) {
   std::cout << "Les deux chaines sont identiques" << std::endl;
  } else {
   std::cout << "Les deux chaines different" << std::endl;
  }

  return 0;
 }
    

Résultat :


 Les deux chaines different
    

La fonction strcmp()

La fonction strcmp(), issue de la bibliothèque standard du C, effectue la comparaison lexicographique de deux chaînes. Elle produit une valeur positive si la première chaîne est considérée comme supérieure à la seconde, une valeur négative dans le cas inverse, et zéro si les deux chaînes sont jugées égales. Il est important de souligner que strcmp() est sensible à la casse.


 #include <cstring>
 #include <iostream>

 int main() {
  char chaine1[] = "Bonjour";
  char chaine2[] = "bonjour";

  int resultat = strcmp(chaine1, chaine2);

  if (resultat > 0) {
   std::cout << "La premiere chaine est superieure a la seconde" << std::endl;
  } else if (resultat < 0) {
   std::cout << "La premiere chaine est inferieure a la seconde" << std::endl;
  } else {
   std::cout << "Les deux chaines sont egales" << std::endl;
  }

  return 0;
 }
   

Résultat :


 La premiere chaine est superieure a la seconde
  

La méthode string::compare()

La méthode string::compare(), propre à la classe string du C++, propose une comparaison lexicographique similaire à strcmp(). Elle retourne un entier positif si la première chaîne est lexicographiquement supérieure à la seconde, un entier négatif si elle est inférieure, et zéro si les chaînes sont identiques. Tout comme strcmp(), cette méthode est sensible à la casse.


 #include <iostream>
 #include <string>

 int main() {
  std::string chaine1 = "Bonjour";
  std::string chaine2 = "bonjour";

  int resultat = chaine1.compare(chaine2);

  if (resultat > 0) {
   std::cout << "La premiere chaine est superieure a la seconde" << std::endl;
  } else if (resultat < 0) {
   std::cout << "La premiere chaine est inferieure a la seconde" << std::endl;
  } else {
   std::cout << "Les deux chaines sont egales" << std::endl;
  }

  return 0;
 }
  

Résultat :


 La premiere chaine est superieure a la seconde
  

Conclusion

Nous avons passé en revue trois méthodes pour réaliser des comparaisons de chaînes en C++ : l'opérateur ==, la fonction strcmp() et la méthode string::compare(). Chacune possède ses particularités. L'opérateur == est simple mais sensible à la casse, strcmp() est une approche plus générale mais également sensible à la casse, et string::compare(), bien que complète, offre davantage de flexibilité avec des options de comparaison partielle.

Questions fréquemment posées (FAQ)

Q : Quelle méthode de comparaison est la plus performante ? R : Le choix dépend des besoins de l'application. L'opérateur == est rapide mais limité par sa sensibilité à la casse. strcmp() est général mais aussi sensible à la casse, tandis que string::compare() est plus flexible mais potentiellement plus lente.
Q : Comment comparer des chaînes sans tenir compte de la casse ? R : Il est possible d'utiliser la fonction strcasecmp() pour une comparaison insensible à la casse.
Q : Comment comparer des chaînes de longueurs différentes ? R : La fonction strncmp() permet de comparer un nombre spécifique de caractères de chaînes différentes.
Q : Comment comparer des chaînes contenant des caractères spéciaux ? R : Il est nécessaire d'échapper les caractères spéciaux avant de procéder à la comparaison.
Q : Comment comparer des chaînes en ignorant les espaces blancs ? R : Vous pouvez utiliser la fonction isspace() pour identifier et ignorer les espaces durant la comparaison.
Q : Comment comparer des chaînes en ignorant les accents ? R : La bibliothèque ICU est l'outil approprié pour comparer des chaînes en faisant abstraction des accents.
Q : Comment comparer des chaînes contenant des caractères Unicode ? R : La fonction wstrcmp() est conçue pour la comparaison de chaînes Unicode.
Q : Comment comparer des chaînes en utilisant des expressions régulières ? R : La bibliothèque Boost.Regex est un outil puissant pour réaliser des comparaisons basées sur des motifs complexes.
Q : Comment comparer des chaînes contenant des retours à la ligne ? R : L'option \n peut être utilisée avec strcmp() pour traiter les retours à la ligne dans les chaînes.
Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.