Comment convertir un vecteur char en un vecteur de chaîne en c++?

Comment convertir un vecteur char en un vecteur de chaîne en c++?
En C ++, la corde littérale: «Je t'aime.«Peut être codé comme suit:
char arrstr [] = 'i', ", 'l', 'o', 'v', 'e',", 'y', 'o', 'u', '.',' \ 0 ',' a ',' n ',' y ',' t ',' h ',' i ',' n ',' g ', ",' e ',' l ',' S ',' E ';

Les caractères dans un tableau de caractères, se terminant par le caractère nul, \ 0 est une chaîne. Le tableau ci-dessus contient en fait les phrases: «Je t'aime.«Et« tout le reste »séparé par le caractère,« \ 0 ».

couter << arrStr << endl;

Imprimerait:

Je t'aime.

Ignorer quoi que ce soit d'autre. C'est la façon traditionnelle d'avoir une ficelle en C++. Tout le reste doit être ignoré après le caractère '\ 0' si le contenu du tableau doit être considéré comme une chaîne.

Avec le pointeur, la chaîne ci-dessus serait codée comme suit:

const char * ptrstr = "je t'aime."

et

couter << ptrStr << endl;

Imprimerait:

Je t'aime.

Un tableau de caractères est un pointeur constant vers les caractères, se terminant par '\ 0'. Cela explique pourquoi const est utilisé dans la déclaration: «const char * ptrstr =« Je t'aime.»;». Les doubles devis éliminent l'utilisation de la structure littérale du tableau et '\ 0'.

Avec la classe String, un objet String pour la phrase ci-dessus serait

String objstr = string ("Je t'aime.");

et

couter << objStr << endl;

Imprimerait:

Je t'aime.

L'objet String aurait toujours pu être instancié comme,

String objstr = string ('i', ", 'l', 'o', 'v', 'e',", 'y', 'o', 'u', '.',' \ 0 ');

La question indirecte est de savoir comment convertir une chaîne de réseau littérale en une double citation littérale et comment convertir un tableau littéral ou double citer littéral en un objet de chaîne. La question directe est que lorsque ces valeurs sont des éléments du vecteur, comment effectuer ces conversions. Cet article explique que.

Avant d'entrer dans l'explication principale, n'oubliez pas que 'e' est un personnage, tandis que "E" est une chaîne. Afin d'utiliser des vecteurs d'objets String, le programme doit commencer:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;

Contenu de l'article

  • Introduction - Voir ci-dessus
  • Vector de caractères de tableau vers les caractères de pointeur vectoriel
  • Vecteur de pointeur vers les caractères vers le vecteur d'objets de chaîne
  • Conclusion

Vector de Chars Tors au vecteur de Chars Pointer

Cette section explique comment convertir un vecteur de tableaux de caractères qui forment des chaînes en un vecteur de cordes à pointes constantes.

Maintenant,

char arrstr [] = 'i', ", 'l', 'o', 'v', 'e',", 'y', 'o', 'u', '.',' \ 0 ',;

et

const char * ptrstr = "je t'aime."

signifie la même chose à l'intérieur, comme le montre le code suivant:

char arrstr [] = 'i', ", 'l', 'o', 'v', 'e',", 'y', 'o', 'u', '.',' \ 0 ',;
pour (int i = 0; arrstr [i] != '\ 0'; i ++)
couter << arrStr[i];
couter << endl;
const char * ptrstr = "je t'aime."
pour (int i = 0; ptrstr [i] != '\ 0'; i ++)
couter << ptrStr[i];
couter << endl;

La sortie est:

Je t'aime.
Je t'aime

Tous les segments de code pour cet article sont dans le corps de fonction principale (). Pour le tableau, le nom du tableau avec [i] est utilisé pour lire toutes les valeurs du tableau. Le nom du pointeur avec [i] est utilisé pour lire toutes les valeurs du littéral de la chaîne pour le pointeur. Notez que '\ 0' est implicite à la fin de la chaîne littérale. Ce qui est constant pour les deux cas, c'est le pointeur et non la valeur. Un nom de tableau est un pointeur constant vers la séquence de caractères, qui devrait se terminer par '\ 0'.

Ainsi, un vecteur de tableaux de caractères, où chaque tableau se termine par «\ 0» ou un vecteur de littéraux de cordes à double qualité, doit être déclaré de la même manière, comme suit:

vecteur Vtr;

Considérez le vecteur suivant des noms de fruits, où chaque nom de fruit est un tableau de caractères, se terminant par '\ 0'.

char fruit1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char fruit2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char fruit3 [] = 'p', 'a', 's', 's', 'i', 'o', 'n', ", 'f', 'r', 'u', 'i ',' t ',' \ 0 ';
char fruit4 [] = 'b', 'a', 'n', 'a', 'n', 'a', '\ 0';
char fruit5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
vecteur Vtr fruit1, fruit2, fruit3, fruit4, fruit5;

Le vecteur de fruits a été construit en écrivant les noms de tableau comme des éléments dans le vecteur. Ce même vecteur peut être construit avec des littéraux de cordes comme suit:

vecteur vtr = "Papaya", "Strawberry", "Passion Fruit", "Banana", "Orange";

Il n'est donc pas nécessaire de convertir un vecteur de tableaux de bouchons en un vecteur de constante-pointeurs-chars. Ils sont la même chose, en dessous. Puisqu'ils sont la même chose, une valeur de chaîne de tableau peut être lue dans un const-porter-to-chars, comme le montre le code suivant:

char fruit1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char fruit2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char fruit3 [] = 'p', 'a', 's', 's', 'i', 'o', 'n', ", 'f', 'r', 'u', 'i ',' t ',' \ 0 ';
char fruit4 [] = 'b', 'a', 'n', 'a', 'n', 'a', '\ 0';
char fruit5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
vecteur Vtr fruit1, fruit2, fruit3, fruit4, fruit5;
pour (int i = 0; iconst char * str = vtr [i];
couter << str << ", ";

couter << endl;

La sortie est:

Papaya, fraise, fruit de la passion, banane, orange,

La ligne,

const char * str = vtr [i];

est là que la conversion supposée se déroule.

Vecteur de pointeur vers les caractères vers le vecteur d'objets de chaîne

La question de la conversion d'un vecteur de pointer-to-chars en vecteur d'objets de cordes, est la même que la question de la conversion d'un vecteur de réseaux de boules en objets vectoriels. Considérez la déclaration suivante:

vecteur
vtr = "Papaya", "Strawberry", "Passion Fruit", "Banana", "Orange";

La déclaration suivante a la déclaration ci-dessus, sous forme d'objet String:

vecteur
vtr = String ("Papaya"), String ("Strawberry"), String ("Passion Fruit"), String ("Banana"), String ("Orange");

Dans ce cas, «#include» doit être en tête du programme. Remarquez l'argument du modèle et les valeurs d'objet String.

Maintenant, il est possible d'attribuer une chaîne littérale, de devenir le contenu d'un objet de chaîne, comme le montrent les trois segments de code suivants:

String str = "ABC";
const char * strlit = "ABC";
String str = strlit;
char arr [] = 'a', 'b', 'c', '\ 0';
String str = arr;

Avec ces connaissances, chaque littéral de chaîne peut être lu dans une variable d'objet String, comme le montre le code suivant:

vecteur vtr = "Papaya", "Strawberry", "Passion Fruit", "Banana", "Orange";
pour (int i = 0; iString str = vtr [i];
couter << str << ", ";

couter << endl;

La sortie est:

Papaya, fraise, fruit de la passion, banane, orange,

La ligne qui fait la conversion de l'objet littéral vers String est:

String str = vtr [i];

Si les valeurs vectorielles étaient des chaînes de tableau, le code suivant fera la même chose:

char fruit1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char fruit2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char fruit3 [] = 'p', 'a', 's', 's', 'i', 'o', 'n', ", 'f', 'r', 'u', 'i ',' t ',' \ 0 ';
char fruit4 [] = 'b', 'a', 'n', 'a', 'n', 'a', '\ 0';
char fruit5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
vecteur Vtr fruit1, fruit2, fruit3, fruit4, fruit5;
pour (int i = 0; iString str = vtr [i];
couter << str << ", ";

couter << endl;

La sortie est la même:

Papaya, fraise, fruit de la passion, banane, orange,

La ligne qui fait la conversion du littéral à un objet de chaîne est toujours la même:

String str = vtr [i];

Vecteur de littéraux de chaîne au vecteur d'objets de chaîne

Pour vraiment changer un vecteur de littéraux de chaîne en un vecteur d'objets de chaîne, la procédure suivante devra être suivie:

  • Créer un autre vecteur vide, mais cette fois, un vecteur d'objets de chaîne.
  • Copiez chaque chaîne littérale du vecteur de const-caracter-pointeurs, vers le vecteur d'objets de chaîne, en poussant.
  • Détruisez le vieux vecteur des littéraux.

Le code suivant illustre ceci:

vecteur vtr = "Papaya", "Strawberry", "Passion Fruit", "Banana", "Orange";
vecteur vtrnew;
pour (int i = 0; ivtrnew.push_back (vtr [i]);

vtr.~ vector ();
pour (int i = 0; iString str = vtrnew [i];
couter << str << ", ";

couter << endl;

La sortie est:

Papaya, fraise, fruit de la passion, banane, orange,

La ligne du code qui détruit l'ancien vecteur est:

vtr.~ vector ();

Le contenu du vecteur est détruit, mais pas le nom du vecteur. Cependant, l'ancien nom vecteur ne peut pas être réutilisé (dans la même portée).

Conclusion

Une chaîne de tableau littéral et un pointeur constant vers la séquence de caractères littérale sont les mêmes choses en dessous. Un littéral de chaîne de tableaux est un littéral de caractères, se terminant par '\ 0'. Une séquence littérale de constante-porteur de const-char de caractères consécutives délimité par des citations doubles, e.g., "abc". '\ 0' est implicite à la fin du littéral constant-to-char-séquence.

Un littéral de chaîne de tableaux ou un littéral constant-to-char-séquence peut être attribué à l'identifiant d'une séquence const-porter-to-char, comme illustré dans le segment de code suivant:

char arr [] = 'a', 'b', 'c', '\ 0';
const char * ss = "def";
ss = arr;
const char * sss = ss;

Il n'y a pas vraiment besoin de convertir un vecteur de chaînes de tableau en un vecteur de littéraux de cordes en double-quot. Il suffit de lire chaque chaîne de tableau du vecteur à l'identifiant d'une séquence constante-porteur.

Cependant, si un vecteur d'objets de chaîne est vraiment requis à partir d'un vecteur de littéraux de chaîne, la conversion doit être effectuée comme suit:

  • Créer un autre vecteur vide, mais cette fois, un vecteur d'objets de chaîne.
  • Copiez chaque chaîne littérale du vecteur des pointeurs de caractère const vers le vecteur d'objets de chaîne en poussant.
  • Détruisez le vieux vecteur des littéraux.

Détruire un vecteur signifie détruire son contenu (éléments), mais pas le nom du vecteur.