'>

c++: séquences de caractères

 Comme vous le savez déjà, la bibliothèque C + + standard met en œuvre une puissante chaîne de classe, ce qui est très utile pour gérer et manipuler des chaînes de caractères. Cependant, parce que les chaînes sont en fait des séquences de caractères, nous pouvons les représenter aussi sous forme de tableaux simples d'éléments chevalier.

Par exemple, le tableau suivant:



  

 char jenny [20];



est un tableau qui peut stocker jusqu'à 20 éléments de type char. Elle peut être représentée comme suit:


Par conséquent, dans ce tableau, en théorie, nous pouvons stocker des séquences de caractères à 20 caractères. Mais nous pouvons également stocker des séquences plus courtes. Par exemple, Jenny pouvait stocker à un moment donné dans un programme, soit la séquence "Bonjour" ou la séquence "Joyeux Noël", puisque les deux sont plus que de 20 caractères.

Par conséquent, depuis le tableau de caractères peut contenir des séquences plus courtes que sa longueur totale, un caractère spécial est utilisé pour signaler la fin de la séquence valide: le caractère nul, dont la constante littérale peut être écrit comme '\ 0' (barre oblique inverse, zéro) .

Notre tableau de 20 éléments de type char, appelé Jenny, peut être représenté stocker les séquences de caractères "Bonjour" et "Joyeux Noël" en tant que:


Remarquez comment après le contenu valide un caractère nul ('\ 0') a été inclus pour indiquer la fin de la séquence. Les panneaux de couleur gris représentent des éléments omble chevalier avec des valeurs indéterminées.

Initialisation des séquences de caractères à zéro terminal
Parce que des tableaux de caractères sont des tableaux ordinaires, ils suivent tous leurs mêmes règles. Par exemple, si nous voulons initialiser un tableau de caractères avec une certaine séquence prédéterminée de personnages que nous pouvons le faire comme tout autre tableau:



  

 char myword[] = { 'H' , 'e' , 'l' , 'l' , 'o' , '\0' };



Dans ce cas, nous avons déclaré un tableau de 6 éléments de type char initialisé avec les caractères qui forment le mot "Bonjour" plus un caractère nul '\ 0' à la fin.
Mais des tableaux d'éléments ombles ont une méthode supplémentaire pour initialiser leurs valeurs: utilisation de littéraux de chaîne.

Dans les expressions que nous avons utilisées dans certains exemples dans les chapitres précédents, les constantes qui représentent des chaînes de caractères entiers ont déjà montré à plusieurs reprises. Elles sont spécifiées entourant le texte de devenir une chaîne littérale entre guillemets ("). Par exemple:



  

 "the result is: "



est une chaîne constante littérale que nous avons probablement déjà utilisé.

Chaînes entre guillemets (") sont des constantes littérales dont le type est en fait un tableau à zéro terminal de caractères. Donc littéraux de chaîne entre guillemets ont toujours un caractère nul ('\ 0') ajouté automatiquement à la fin.

Par conséquent, nous pouvons initialiser le tableau des éléments omble appelés MyWord avec une séquence terminée par NULL de caractères par l'un de ces deux méthodes:

 1
 2


  

 char myword [] = { 'H' , 'e' , 'l' , 'l' , 'o' , '\0' }; char myword [] = "Hello" ;



Dans les deux cas, le tableau de caractères MyWord est déclarée avec une taille de 6 éléments de type char: les 5 caractères qui composent le mot "Bonjour" plus un caractère nul final ('\ 0') qui spécifie la fin de la séquence et que , dans le second cas, lorsque vous utilisez des guillemets ("), il est ajouté automatiquement.

Veuillez noter que nous parlons de l'initialisation d'un tableau de caractères dans le moment où elle est déclarée, et non sur l'attribution de valeurs à eux une fois qu'ils ont déjà été déclarées. En fait, parce que ce type de tableaux à zéro terminal de caractères sont des tableaux réguliers, nous avons les mêmes restrictions que nous avons avec tout autre tableau, donc nous ne sommes pas en mesure de copier des blocs de données avec une opération d'affectation.

En supposant mystext est un char [] variables, expressions dans un code source comme:

 1
 2


  

 mystext = "Hello" ; mystext[] = "Hello" ;



ne serait pas valable, ni comme serait:



  

 mystext = { 'H' , 'e' , 'l' , 'l' , 'o' , '\0' };



La raison en est peut-être plus compréhensible une fois que vous en savez un peu plus sur les pointeurs, car alors il sera précisé qu'un tableau est en fait un pointeur constant pointant vers un bloc de mémoire.

En utilisant des séquences à zéro terminal de caractères

Séquences à zéro terminal de caractères sont le moyen naturel de traiter les chaînes en C + +, afin qu'ils puissent être utilisés comme tels dans de nombreuses procédures. En fait, les chaînes littérales réguliers ont ce type (char []) et peut également être utilisé dans la plupart des cas.

Par exemple, cin et cout soutien séquences zéro terminal que les conteneurs valides pour des séquences de caractères, de sorte qu'ils peuvent être utilisés directement pour extraire des chaînes de caractères à partir de CIN ou de les insérer dans cout. Par exemple:

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14


  

 // null-terminated sequences of characters #include <iostream> using namespace std; int main () { char question[] = "Please, enter your first name: " ; char greeting[] = "Hello, " ; char yourname [80]; cout << question; cin >> yourname; cout << greeting << yourname << "!" ; return 0; }

  

  Entrez votre prénom: John
  Bonjour, John!



Comme vous pouvez le voir, nous avons décrété trois tableaux d'éléments chevalier. Les deux premiers ont été initialisés avec cordes constantes littérales, tandis que le troisième a été laissé initialisé. Dans tous les cas, nous devons spécifier la taille de la matrice: dans les deux premiers (question et réponse) La taille est définie implicitement par la longueur de la constante littérale ils ont été initialisés. Alors que pour votrenom nous avons explicitement précisé qu'il a une taille de 80 caractères.

Enfin, des séquences de caractères stockées dans des tableaux omble peuvent facilement être convertis en objets de chaîne simplement en utilisant l'opérateur d'affectation:

 1
 2
 3


  

 string mystring; char myntcs[]= "some text" ; mystring = myntcs;

Publié par Drupal Study