Les chaînes sont créées de deux manières principales en C ++: Utilisation d'un pointeur constant ou instanciant à partir d'une classe de chaîne. La corde littérale: «J'ai découvert le trésor.«Peut être construit de la manière suivante en C ++:
char str1 [] = "J'ai découvert le trésor."
const char * str2 = "J'ai découvert le trésor."
#inclure
String str3 = string ("J'ai découvert le trésor.");
String str4 = string ("J'ai découvert le trésor.");
Création d'une chaîne à l'aide d'un tableau ou du pointeur de caractère constant, sont la même façon de créer une chaîne. STR3 et STR4 ici ont été créés par instanciation à partir de la bibliothèque de chaînes incluse. Notez que les doubles citations utilisées par les littéraux de chaîne en programmation ne sont pas les mêmes que celles utilisées par un traitement de texte.
La question est: «Comment puis-je comparer deux chaînes en C++?"Le premier conseil est qui ne compare pas les chaînes créées par des pointeurs de caractère constants. Lorsque vous faites cela, vous comparez les pointeurs et non la corde littérale. Alors, ne comparez pas STR1 et STR2 ci-dessus. Si vous faites cela, vous comparez leurs pointeurs et non leur contenu.
Pour comparer les chaînes en C ++, vous devez comparer les chaînes créées par instanciation de la bibliothèque de chaînes incluse. Ainsi, STR3 et STR4 ci-dessus peuvent être comparés, et ils compareront l'égalité.
Ce tutoriel explique comment comparer les littéraux de cordes en C ++, en commençant par la comparaison des caractères en C++. La comparaison des personnages conduit à la comparaison des chaînes, bien que les personnages soient traités différemment des chaînes, en C++.
Contenu de l'article
Comparaison des personnages
Les personnages sont en fait représentés dans l'ordinateur par des nombres. Donc, lorsque vous comparez les caractères, ce sont les nombres comparés.
L'ordre de comparaison des caractères, qui forme des littéraux à cordes, est le suivant: Les chiffres viennent avant les lettres majuscules, qui se présentent avant les lettres minuscules. D'autres caractères tels que la cloche, l'onglet, la touche Entrée, le $, le &, le [, l'arrière-plan, le , le |, et le, sont placés avant ou après, ou aux intervalles de ces gammes. La comparaison des caractères en C ++ utilise des opérateurs relationnels et d'égalité qui sont:
< meaning, less thanLa classe String utilise également ces opérateurs pour comparer les littéraux de chaîne.
Note: Un personnage est célibataire et il est délimité par des citations uniques.
Chacune des deux instructions suivantes imprime 1, pour vrai:
couter << ('5' < 'E') << endl;
couter << ('E' < 'e') << endl;
Chacune des deux instructions suivantes imprime, 1 pour vrai:
couter << ('E' <= 'E') << endl;
couter << ('E' >= 'E') << endl;
La déclaration suivante imprime 1, pour vrai:
couter << ('e' == 'e') << endl;
La déclaration suivante imprime 1, pour vrai:
couter << ('e' != 'E') << endl;
Objets de classe de chaîne
Après avoir inclus la bibliothèque String avec l'inclusion-directive, un objet String peut être instancié (construit) en C ++, de la manière suivante:
String str = "Comment se fait-il? - 50 000 $!"
String str = string ("Comment se fait-il? - 50 000 $!");
String str = string ('h', 'o', 'w', ", 'c', 'o', 'm', 'e', '?', ",' - ',",' $ ',' 5 ',' 0 ',', ',' 0 ',' 0 ',' 0 ','!',' \ 0 ');
La chaîne littérale pour ces trois cas est la même. Cependant, notez le caractère nul «\ 0», à la fin du contenu du tableau.
Déjà, il y a six caractères non alphabétiques dans ce littéral de cordes, qui sont '?',' $ ',' - ',', ','!'Et l'espace ("). Imaginez un nouveau dictionnaire, où les caractères non alphabétiques sont utilisés en mots, et respecte l'ordre (ASCII) mentionné ci-dessus. Vous savez déjà comment comparer les mots dans le dictionnaire normal. C ++ compare les littéraux de cordes de la même manière dans ce nouveau dictionnaire.
N'oubliez pas que pour comparer les littéraux de cordes en C ++, comparez les objets de chaîne représentés par leurs identifiants.
Opération d'égalité
L'opérateur égal est, == . La syntaxe est:
str == strb
Si le contenu de STR est le même que le contenu de STRB, respectant le boîtier (n'ignore pas le capital et les petites lettres), le résultat de l'opération est vrai.
L'opérateur non égal est, != . La syntaxe est:
stro != strb
La moindre différence de contenu, entre STR et STRB, concernant le boîtier (n'ignore pas le capital et les petites lettres), se traduit par une fausse, pour cette opération.
Considérez le code suivant:
String str1 = "$ moneya [26]";
String str2 = "$ moneya [26]";
bool bla = str1 == str2;
couter << blA << endl;
String str3 = "$ moneya [26]";
String str4 = "$ moneya [26]";
bool blb = str3 == str4;
couter << blB << endl;
La sortie est:
1 // pour vrai
0 // pour false
Les séquences sont les mêmes pour les littéraux STR1 et STR2; Donc, la valeur de retour est vraie. Les séquences sont comme les mêmes pour les littéraux STR3 et STR4; Mais une chaîne littérale a du texte minuscule et l'autre a du texte majuscule; Donc, la valeur de retour est fausse.
Ce qui suit est le code ci-dessus répété, mais avec «!= ”Au lieu de" == ".
String str1 = "$ moneya [26]";
String str2 = "$ moneya [26]";
bool bla = str1 != str2;
couter << blA << endl;
String str3 = "$ moneya [26]";
String str4 = "$ moneya [26]";
bool blb = str3 != str4;
couter << blB << endl;
La sortie est:
0 // pour false
1 // pour vrai
Ignorer le cas en comparaison
À partir de maintenant, C ++ n'a pas de fonction pour comparer les chaînes, ignorant le cas. La façon de le faire est de convertir les deux chaînes en majuscules, avant de comparer. La bibliothèque d'algorithmes devra être incluse. Cette bibliothèque a la fonction transform (), qui fait la conversion en majuscules. Pour la déclaration,
String str = "j'aime 1000 $ nous."
La construction,
transformer (str.begin (), str.end (), str.begin (), :: toupper);
Tournera le littéral représenté par Str, à:
"J'adore 1000 $ nous."
Notez que des caractères non alphabétiques, tels que «$», '.'Et l'espace n'a pas changé (car ils n'ont pas de variantes supérieures et minuscules).
Le programme suivant utilise ce schéma, pour comparer les littéraux de cordes, ignorant le cas:
#inclure
#inclure
#inclure
Utilisation de Namespace Std;
int main()
String str3 = "$ moneya [26]";
Transformer (STR3.begin (), str3.end (), str3.begin (), :: toupper);
String str4 = "$ moneya [26]";
Transformer (STR4.begin (), str4.end (), str4.begin (), :: toupper);
bool blb = str3 == str4;
couter << blB << endl;
retour 0;
La sortie est 1, pour vrai, car les deux chaînes sont maintenant en majuscules, toutes les autres choses étant égales.
Moins de, supérieur à
stro < strB
Se traduit par vrai, si le littéral de Str apparaissait dans le dictionnaire, avant celui de STRB.
str> strb
Se traduit par vrai, si le littéral de Str apparaissait dans le dictionnaire, après celui de STRB.
Le code suivant renvoie vrai, car "wxyz" est inférieur à "wxyz":
String str1 = "wxyz";
String str2 = "wxyz";
bool bl = str1 < str2;
couter << bl << endl;
La sortie est 1. Le code suivant renvoie vrai, car «stuv» est inférieur à «wxyz»:
String str1 = "Stuv";
String str2 = "wxyz";
bool bl = str1 < str2;
couter << bl << endl;
La sortie est 1, pour vrai. Le code suivant renvoie faux, car «wxyz» est égal à «wxyz», et str1 n'est pas inférieur à Str2.
String str1 = "wxyz";
String str2 = "wxyz";
bool bl = str1 < str2;
couter << bl << endl;
La sortie est 0. Le code suivant renvoie vrai, car «wxy» est supérieur à «bcde»:
String str1 = "wxy";
String str2 = "bcde";
bool bl = str1> str2;
couter << bl << endl;
La sortie est 1.
Inférieur ou égal à, supérieur ou égal à
stro <= strB
Se traduit par vrai, si le littéral de l'étroime est inférieur, ou est le même (égal à) que celui de Strb.
str> = strb
Se traduit par vrai, si le littéral de l'étroi.
Le code suivant renvoie vrai, car «wxyz» est inférieur ou égal à «wxyz»:
String str1 = "wxyz";
String str2 = "wxyz";
bool bl = str1 <= str2;
couter << bl << endl;
La sortie est 1. Le code suivant renvoie vrai, car «stuv» est inférieur ou égal à «WXYZ»:
String str1 = "Stuv";
String str2 = "wxyz";
bool bl = str1 <= str2;
couter << bl << endl;
La sortie est 1. Le code suivant renvoie vrai, car «wxyz» est inférieur ou égal à «WXYZ» (et STR1 n'est pas inférieur à STR2).
String str1 = "wxyz";
String str2 = "wxyz";
bool bl = str1 <= str2;
couter << bl << endl;
La sortie est 1. Le code suivant renvoie vrai, car «wxy» est supérieur ou égal à «bcde»:
String str1 = "wxy";
String str2 = "bcde";
bool bl = str1> = str2;
couter << bl << endl;
La sortie est 1.
Conclusion
Pour comparer les caractères en C ++, utilisez l'égalité et les opérateurs relationnels. Pour comparer les littéraux de chaînes, utilisez toujours l'égalité et les opérateurs relationnels, mais pour les objets de la classe de chaînes, et non pour const char * s. L'utilisation des opérateurs de const char * s compare les pointeurs, et non les littéraux de cordes.