Comparaison de chaîne et de caractère en C++

Muhammad Husnain 11 décembre 2023
  1. Créer un tableau de caractères en C++
  2. Utiliser la bibliothèque String en C++
  3. Comparaison des chaînes avec Char en C++
Comparaison de chaîne et de caractère en C++

Ce guide trivial concerne l’utilisation de chaînes en C++ et la manière dont ces chaînes sont comparées à d’autres littéraux. Avant d’aller plus loin, nous présenterons brièvement les chaînes en C++.

En C++, les chaînes peuvent être catégorisées de deux manières différentes :

  1. Créez un tableau Caractère pour former une chaîne
  2. Utiliser la bibliothèque standard String en C++

Créer un tableau de caractères en C++

Comme dans le langage C, C++ nous fournit également des tableaux de caractères, c’est-à-dire un tableau char, qui peut être utilisé comme littéral de chaîne. C’est un tableau unidimensionnel de caractères terminé par un null.

Ainsi, la chaîne est créée en formant un tableau char et en le terminant par un caractère null.

Veuillez noter que pour imprimer un tableau de caractères à l’aide d’une méthode d’agrégation (par exemple, cout<< charArray), un caractère null doit terminer le tableau de caractères. C++ utilise \0 comme caractère null et aide les méthodes agrégées à détecter la fin de la chaîne de caractères (il est impossible de détecter la fin d’un tableau sans un symbole de fin).

Par conséquent, l’exemple ci-dessous déclare un tableau de caractères de taille 11 bien que C ne contienne que dix caractères.

char word[11] = {'C', '-', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '\0'};

L’instruction ci-dessus peut également être écrite comme suit, à condition que vous suiviez les règles d’initialisation.

char word[] = "C-language";

Si vous oubliez de mettre le caractère null à la fin, le compilateur place implicitement le caractère null à la fin elle-même. Jetons un œil au programme ci-dessous.

#include <iostream>
using namespace std;

int main() {
  char word[11] = {'C', '-', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '\0'};
  cout << "First message: ";
  cout << word << endl;
  return 0;
}

La ligne #06 dans l’extrait de code ci-dessus contribuera First Message: à la sortie, tandis que la ligne #07 affichera tous les caractères de la variable word jusqu’à rencontrer un \0. Par conséquent, l’extrait de code ci-dessus générera la sortie suivante.

First Message: C-language

Utiliser la bibliothèque String en C++

C++ a un fichier d’en-tête string.h intégré dans sa bibliothèque standard. Il fournit un ensemble de fonctionnalités (par exemple, strcpy, strlen, etc.) pour travailler avec des chaînes de style C (c’est-à-dire des chaînes à terminaison nulle).

Veuillez noter que toutes les bibliothèques string modernes incluses sans .h sont différentes de string.h. La bibliothèque de classes string est une bibliothèque C++ pour manipuler les chaînes C++ modernes tandis que string.h est un fichier d’en-tête C pour manipuler les chaînes de style C (c’est-à-dire les chaînes à terminaison nulle).

Regardons le code ci-dessous pour comprendre la bibliothèque string.h.

#include <string.h>

#include <iostream>
using namespace std;

int main() {
  char country[] = "Pakistan";
  char countryTemp[50] = "abc";

  cout << "countryTemp length before initializing is:";
  cout << strlen(countryTemp) << endl;

  // strcpy()
  cout << "Let's copy country to countryTemp" << endl;
  strcpy(countryTemp, country);
  cout << "countryTemp=" << countryTemp << endl;

  cout << "countryTemp length after copying country is:";
  cout << strlen(countryTemp) << endl;

  return 0;
}

Le programme ci-dessus déclare d’abord deux tableaux de caractères (C-strings) et initialise le premier avec Pakistan. La ligne #10 imprime la longueur de countryTemp, qui est 3.

Bien que la taille totale du countryTemp soit de 50 octets, le strcpy ne peut calculer la taille qu’en fonction du caractère NULL (placé dans le quatrième octet du tableau). Par conséquent, le strcpy renvoie 3.

La ligne #14 utilise la fonction strcpy pour copier le contenu du tableau country dans countryTemp. Par conséquent, la nouvelle longueur de countryTemp devient 8.

Production:

countryTemp length before initializing is:3
Let's copy country to countryTemp
countryTemp=Pakistan
countryTemp length after copying country is:8

Remarque : Il existe de nombreuses fonctions fournies par le fichier d’en-tête string.h pour les chaînes terminées par NULL (également appelées chaînes de style C). Plus de fonctions de bibliothèque disponibles peuvent être trouvées ici.

Comparaison des chaînes avec Char en C++

C’est un problème courant pour les gens de comparer des chaînes avec des constantes de caractères. Ce n’est pratiquement pas possible.

Considérez le code ci-dessous.

#include <iostream>
using namespace std;

int main() {
  cout << "Do you want to proceed (y or n)?\n";
  char inp;
  cin >> inp;
  if (inp == "y")  // error here
    cout << "Hello again" << endl;
  else
    cout << "Good Bye" << endl;
  return 0;
}

Ici, dans cette fonction, nous avons fait une entrée de l’utilisateur, qui est une variable char, et dans la condition if, nous la comparons avec une chaîne littérale entre guillemets doubles. Ce code va générer une erreur error: ISO C++ forbids comparison between pointer and integer.

Il est recommandé de prendre l’entrée dans la variable string au lieu de la variable char pour éviter cette erreur.

#include <iostream>
#include <string>
using namespace std;

int main() {
  cout << "Do you want to proceed (y or n)?\n";
  string ans;
  cin >> ans;
  if (ans == "y")  // error here
    cout << "Hello again" << endl;
  else
    cout << "Good Bye" << endl;
  return 0;
}

Production:

Do you want to proceed (y or n)?
n
Good Bye
Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn

Article connexe - C++ String