Caractère littéral
Un caractère littéral est un caractère entre guillemets simples. Donc,
char ident1 = 'A'; char ident2 = 'b'; char ident3 = '4'; caractère ident4 = '6';sont toutes des définitions différentes des caractères. Notez qu'un chiffre entre guillemets simples est un caractère et non un entier.
Une séquence d'échappement telle que \” (voir ci-dessous) entre guillemets simples, est un caractère. Donc,
char ident1 = '"';est un personnage.
Un seul symbole entre guillemets n'est pas un caractère ; c'est une chaîne d'un caractère. Donc "A" ou "c" ou "2" n'est pas un caractère mais une chaîne d'un caractère chacun.
La variable d'un caractère peut être réaffectée, plus loin dans le programme, comme suit :
identificateur de caractère = 'x';ident = 'O';
Pour empêcher la modification d'un caractère affecté à un identifiant, plus loin dans le programme, faites précéder la définition du mot réservé, const, de la manière suivante :
const char ident = 'd';La variable ident est dite en lecture seule.
Littéral de chaîne
Un littéral de chaîne est une séquence de caractères entre guillemets doubles. Donc,
char ident1[] = "Je t'aime"; char ident2[] = "Je déteste 3 d'entre vous"; char ident3[]= "nous sommes le monde" ; char ident4[] = "Bonjour tout le monde!";
sont toutes des définitions différentes des littéraux de chaîne. Notez l'utilisation de guillemets doubles. Il n'y a rien de tel qu'une variable ordinaire pour une chaîne. Un littéral de chaîne est un tableau de caractères, où au lieu d'être délimité par , la séquence est délimitée par "". Les caractères ne sont pas séparés par des virgules. Tout nombre supérieur au nombre de caractères dans la chaîne littérale peut être placé entre crochets. Cependant, il est préférable de laisser les crochets vides.
Un seul caractère entre guillemets n'est pas un caractère ; c'est une chaîne d'un caractère. Donc "A" ou "c" ou "2" n'est pas un caractère, mais une chaîne d'un caractère chacun.
Une variable de chaîne ne permet pas la réaffectation du littéral complet, plus tard dans le programme - voir ci-dessous. Cependant, des caractères individuels peuvent être réaffectés - voir ci-dessous.
Citation simple et double en caractère ou littéral
Pour avoir une seule guillemet comme personnage, faites quelque chose comme,
identificateur de caractère = '\'';Pour avoir un guillemet double comme caractère dans un littéral de chaîne, faites quelque chose comme,
char ident[] = "ab"cd" ;La barre oblique inverse est utilisée dans une séquence d'échappement, pour éviter les conflits avec les délimiteurs. Pour avoir un guillemet double en tant que caractère, il n'y a pas besoin de la barre oblique inverse : ' ' ' est correct. Pour avoir un guillemet simple dans un littéral de chaîne, il n'y a pas besoin de barre oblique inverse : "ab'cd" est correct.
Étant donné que la barre oblique inverse est utilisée pour échapper à un caractère, elle doit être échappée avec une autre barre oblique inverse lorsqu'elle est utilisée comme caractère ou dans un littéral de chaîne.
Séquence d'échappement
Une séquence d'échappement est l'une des suivantes :
\' " \? \\ \a \b \f \n \r >\t \vChaque séquence d'échappement est normalement saisie soit sous forme de caractère entre guillemets simples, soit sous forme de séquence d'échappement entre guillemets doubles.
- \' : est utilisé comme guillemet simple, entre guillemets simples.
- \” : est utilisé comme guillemet double, dans un littéral.
- \? : puisque ? est un caractère réservé, il doit être échappé dans un littéral.
- \\ : la barre oblique inverse doit être échappée sous la forme d'un caractère ou d'un littéral de chaîne, afin de ne pas donner une autre signification.
- \a : sonne une fois l'alarme, lorsqu'il est utilisé comme caractère ou dans une chaîne littérale.
- \b : résultats comme un retour arrière dans l'affichage dans un littéral de chaîne, enlevant le caractère précédent.
- \f : provoque l'alimentation de la page suivante vers l'imprimante lorsqu'elle est utilisée comme caractère ou dans un littéral.
- \r : renvoie le curseur, où le caractère suivant doit être imprimé, mais dans la ligne courante.
- \n : renvoie le curseur au début de la ligne suivante ou juste à la ligne suivante, selon le système d'exploitation.
- \t : crée un onglet horizontal.
- \v : crée un onglet vertical.
Opérations avec des personnages
Enchaînement
Lors de la définition, deux littéraux de chaîne peuvent être joints avec un espace comme suit :
char ident[] = "abc" "def" ;cout << ident << "\n";
La sortie est : abcdef . Cette définition peut être étendue à plus de deux littéraux. Remarque : la déclaration est une définition, pas seulement une affectation. La définition peut même continuer à la ligne suivante avec un espace séparant les lignes comme suit :
char ident[] = "abc" "def""ghi" ;
cout << ident << "\n";
La sortie est, abcdefghi.
Remarque : Les caractères ne peuvent pas être concaténés de cette manière, car les guillemets simples du caractère ne peuvent pas avoir plus d'un symbole.
Opérateurs d'égalité
Les mêmes caractères dans la même casse sont égaux. Ils ne sont pas égaux s'ils ne sont pas du même cas. Considérer,
résultat booléen = 'B' == 'B';cout << result << "\n";
== signifie égal, tandis que = signifie attribué à et non égal. La sortie est 1 pour vrai. Considérer,
résultat booléen = 'B' == 'b';cout << result << "\n";
La sortie est 0 pour faux. Considérer,
résultat booléen = 'b' == 'c';cout << result << "\n";
La sortie est 0 pour faux. Considérer,
résultat booléen = 'B' != 'B';cout << result << "\n";
!= signifie non égal, tandis que = signifie attribué à et non égal. La sortie est 0 pour faux. Considérer,
résultat booléen = 'B' != 'b';cout << result << "\n";
La sortie est 1 pour vrai. Considérer,
résultat booléen = 'b' != 'c';cout << result << "\n";
La sortie est 1 pour vrai.
Donc, == et != sont des opérateurs d'égalité.
Opérateurs relationnels
Pour les caractères ordinaires en C++, dans l'ordre croissant, les nombres précèdent les majuscules, qui précèdent les minuscules.
Donc < will return true (1) when the left character is less than the right character. The other relational operators, <=, >, >= sont expliqués de la même manière.
Le littéral de chaîne en tant qu'objet
Le tableau est un pointeur constant vers le début d'une séquence de type de données particulier. De même, la chaîne est un pointeur constant vers le début d'une séquence de caractères. Comparez les définitions suivantes :
int arr[] = 3, 4, 5, 6, 7 ;char str[] = 'w', 'o', 'm', 'a', 'n' ;
char stri[] = "femme";
Le premier tableau est un tableau d'entiers et a cinq éléments. Les deuxième et troisième tableaux sont des tableaux de caractères avec des noms différents, mais le même nombre d'éléments. Les deuxième et troisième tableaux sont les mêmes, mais pour leurs noms. Le contenu textuel du deuxième tableau est délimité par des accolades ; les caractères sont séparés par des virgules et chaque caractère est entre guillemets simples. Le contenu textuel du troisième tableau est délimité par des guillemets ; les caractères ne sont pas séparés par des virgules et chaque caractère n'est pas entre guillemets simples. Les deuxième et troisième tableaux sont deux manières de produire une chaîne, la troisième étant la meilleure.
arr est un pointeur constant vers le premier élément de son tableau, ce qui signifie que arr pointera toujours vers l'emplacement ayant l'entier, 3 même si la valeur de 3 est modifiée. La taille du tableau, cinq éléments, ne reste pas vraiment constante. Cependant, chacune des valeurs du tableau peut être modifiée.
str est un pointeur constant vers le premier élément de son tableau, ce qui signifie que str pointera toujours vers l'emplacement ayant le caractère 'w' même si la valeur de 'w' est modifiée. La taille du tableau de caractères, cinq éléments, ne reste pas vraiment constante. Cependant, chacune des valeurs du littéral peut être modifiée.
stri est un pointeur constant vers le premier élément de son littéral (tableau), ce qui signifie que stri pointera toujours vers l'emplacement ayant le caractère w même si la valeur de w est modifiée. La taille du littéral de chaîne (tableau), cinq éléments, ne reste pas vraiment constante. Cependant, chacune des valeurs du littéral peut être modifiée.
Qu'est-ce qui est constant dans un tableau ou un littéral de chaîne? L'adresse mémoire du premier élément du tableau ou du littéral reste la valeur du nom (identifiant) du tableau ou du littéral, et ne peut pas être modifiée. Eh bien, la taille du tableau ou du littéral ne reste pas vraiment constante. Chaque valeur du tableau ou du littéral peut être modifiée. Le code suivant montre comment le quatrième élément de chacun des tableaux a été modifié :
int arr[] = 3, 4, 5, 6, 7 ;char str[] = 'w', 'o', 'm', 'a', 'n' ;
char stri[] = "femme";
arr[3] = 9;
str[3] = 'e';
stri[3] = 'e';
cout << arr[3] << '\n';
cout << str << '\n';
cout << stri << '\n';
La sortie est :
9femmes
femmes
Notez que les éléments d'un littéral de chaîne défini, comme pour la troisième définition ci-dessus, sont accessibles avec l'index de tableau (indice). La raison de la deuxième ligne de la sortie est donnée ci-dessous.
Indice de définition
Notez que dans les définitions ci-dessus, il n'y a pas d'entier pour l'indice. Lorsque le nombre d'éléments ne peut pas être facilement déterminé par le programmeur, l'entier de l'indice doit être omis. Quoi qu'il en soit, l'entier ne doit pas être inférieur au nombre d'éléments du tableau.
Pour le littéral de chaîne, l'entier doit être supérieur d'au moins 1 au nombre de caractères de la chaîne. En effet, le caractère nul (\0) est toujours ajouté par le compilateur, à la fin d'un tableau qui est une chaîne, délimité par des guillemets doubles. Le caractère nul n'est pas ajouté à la fin du deuxième tableau ci-dessus, car ce n'est pas une chaîne officielle. Le troisième tableau est une chaîne officielle. Le code suivant montre les valeurs d'indice minimales.
int arr[5] = 3, 4, 5, 6, 7 ;char str[5] = 'w', 'o', 'm', 'a', 'n' ;
car stri[6] = "femme";
Afin de faire de la deuxième définition une chaîne officielle, le caractère nul doit être ajouté comme suit :
int arr[5] = 3, 4, 5, 6, 7 ;char str[6] = 'w', 'o', 'm', 'a', 'n', '\0' ;
car stri[6] = "femme";
La sortie devrait maintenant être,
9femmes
femmes
sans la deuxième « femmes ». Notez que l'indice correspondant pour le deuxième tableau est 6, et non 5 comme c'était le cas.
Valeurs littérales constantes
Pour empêcher la modification de tout caractère des guillemets affectés à un identifiant, plus loin dans le programme, faites précéder la définition du mot réservé const de la manière suivante :
const char ident[] = "Je t'aime";Opérations avec des littéraux de chaîne
Opérations d'égalité
Les opérateurs d'égalité sont == et != . Lorsque les variables (identifiants) de deux chaînes sont comparées, ce sont les pointeurs (adresses) des littéraux qui finissent par être comparés ; C'est faux. Pour comparer des chaînes, les littéraux doivent être comparés, comme dans le code suivant :
bool result = "femme" == "femme";cout << result << '\n';
La sortie est 1 pour vrai. La comparaison se fait à la manière du dictionnaire, mais avec des chiffres venant en premier dans l'ordre croissant, avant les majuscules, qui viennent avant les minuscules. La sortie du code suivant est 0, pour false.
résultat bool = "femme" != "femme" ;cout << result << '\n';
Opérateurs relationnels avec des littéraux de chaîne
Les opérateurs relationnels ne fonctionnent pas avec les littéraux de chaîne.
Littéral de chaîne brute
Un littéral de chaîne brut, permet à une chaîne d'être affichée comme tapée, en ignorant les séquences d'échappement et en respectant les nouvelles lignes. Considérez le code suivant :
char str[] = R"(abc\\d efg hijklmn \n " ' opq
premier)" ;
cout << str << '\n';
La sortie est :
abc\\d efg hijklmn \n " ' opq
d'abord
Dans le code, le littéral de chaîne brut commence par R, suivi de ” et ( . Il se termine par ) et ".
Types littéraux de chaîne principale C++
carboniser
Le type char est le type C++ d'origine et stocke généralement un caractère sur 8 bits.
char16_t
Cela stocke un caractère en 16 bits.
char32_t
Ceci stocke un caractère en 32 bits.
wchar_t
char16_t et char32_t sont des caractères larges. wchar_t est un caractère large qui est propriétaire et défini par l'implémentation.
Conclusion
Un littéral de caractère est un caractère unique entre guillemets simples. Une séquence d'échappement est un caractère qui peut également être entre guillemets simples. Un littéral de chaîne est une séquence de caractères entre guillemets. Un littéral de chaîne est un tableau de caractères se terminant par \0. Les opérateurs d'égalité et relationnels fonctionnent avec des littéraux de caractère. Les opérateurs d'égalité fonctionnent avec des littéraux de chaîne, mais les opérateurs relationnels ne fonctionnent pas avec des littéraux de chaîne. Les identificateurs de caractères peuvent être utilisés dans les comparaisons, mais les identificateurs de chaîne ne doivent pas être utilisés dans les comparaisons. Un littéral de chaîne brut permet à une chaîne d'être affichée comme tapée, en ignorant les séquences d'échappement et en respectant les nouvelles lignes.
Chrys