¿Cómo se convierte un vector de char a un vector de cadena en c?++?

¿Cómo se convierte un vector de char a un vector de cadena en c?++?
En c ++, la cuerda literal: "Te amo."Se puede codificar de la siguiente manera:
Char Arrstr [] = 'i', ", 'l', 'o', 'v', 'e',", 'y', 'o', 'u', '.',' \ 0 ',' a ',' n ',' y ',' t ',' h ',' i ',' n ',' g ', ",' e ',' l ',' s ',' e ';

Personajes en una variedad de caracteres, terminando con el personaje NUL, \ 0 es una cadena. La matriz de arriba en realidad contiene las frases: "Te amo."Y" cualquier otra cosa "separado por el personaje, '\ 0'.

cout << arrStr << endl;

Imprimiría:

Te amo.

Ignorando cualquier otra cosa. Esta es la forma tradicional de tener una cadena en C++. Cualquier otra cosa debe ignorarse después del carácter '\ 0' si el contenido de la matriz se debe considerar una cadena.

Con el puntero, la cadena anterior se codificaría como:

const char* ptrstr = "Te amo.";

y

cout << ptrStr << endl;

Imprimiría:

Te amo.

Una variedad de personajes es un puntero constante a los personajes, que termina con '\ 0'. Esto explica por qué const se usa en la declaración, "const char* ptrstr =" Te amo.";". Las citas dobles eliminan el uso de la estructura literal de la matriz y '\ 0'.

Con la clase de cadena, un objeto de cadena para la frase anterior sería

string objstr = string ("Te amo.");

y

cout << objStr << endl;

Imprimiría:

Te amo.

El objeto de cadena aún podría haber sido instanciado como,

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

La pregunta indirecta es cómo convertir una cadena de matriz literal a una cita doble literal y cómo convertir una matriz literal o doble cita literal a un objeto de cadena. La pregunta directa es que cuando estos valores son elementos del vector, cómo hacer estas conversiones. Este artículo explica que.

Antes de entrar en la explicación central, recuerde que 'E' es un personaje, mientras que "E" es una cadena. Para usar vectores de objetos de cadena, el programa debe comenzar con:

#incluir
#incluir
#incluir
usando el espacio de nombres STD;

Contenido del artículo

  • Introducción - Ver arriba
  • Vector de caracteres de matriz para vectores de puntero Chars
  • Vector de puntero a chars to vector de objetos de cadena
  • Conclusión

Vector de Chars de matriz a Vector de Chars Pointer

Esta sección explica cómo convertir un vector de matrices de caracteres que forman cadenas a un vector de constante inicio de cuerdas.

Ahora,

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

y

const char* ptrstr = "Te amo.";

significa lo mismo dentro, como muestra el siguiente código:

Char Arrstr [] = 'i', ", 'l', 'o', 'v', 'e',", 'y', 'o', 'u', '.',' \ 0 ',;
para (int i = 0; Arrstr [i] != '\ 0'; i ++)
cout << arrStr[i];
cout << endl;
const char* ptrstr = "Te amo.";
para (int i = 0; ptrstr [i] != '\ 0'; i ++)
cout << ptrStr[i];
cout << endl;

La salida es:

Te amo.
Te amo

Todos los segmentos de código para este artículo están en el cuerpo de la función principal (). Para la matriz, el nombre de la matriz con [i] se usa para leer todos los valores en la matriz. El nombre del puntero con [i] se usa para leer todos los valores en la cadena literal para el puntero. Tenga en cuenta que '\ 0' está implícito al final de la cadena literal. Lo que es constante para ambos casos es el puntero y no el valor. Un nombre de matriz es un puntero constante a la secuencia de caracteres, que debería terminar con '\ 0'.

Entonces, un vector de matrices de caracteres, donde cada matriz termina con '\ 0' o un vector de literales de cadena de doble cotización, debe declararse de la misma manera, como sigue:

vector VTR;

Considere el siguiente vector de nombres de frutas, donde cada nombre de fruta es una variedad de caracteres, que termina con '\ 0'.

char fruit1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char fruit2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char fruts3 [] = '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';
vector VTR Fruit1, Fruit2, Fruit3, Fruit4, Fruit5;

El vector de las frutas se ha construido escribiendo los nombres de la matriz como elementos en el vector. Este mismo vector se puede construir con literales de cadena de la siguiente manera:

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

Por lo tanto, no hay necesidad de convertir un vector de matrices de Chars a un vector de constantes de constante. Son lo mismo, debajo. Dado que son lo mismo, un valor de cadena de matriz se puede leer en un constante a Chars, como muestra el siguiente código:

char fruit1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char fruit2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char fruts3 [] = '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';
vector VTR Fruit1, Fruit2, Fruit3, Fruit4, Fruit5;
para (int i = 0; iconst char* str = vtr [i];
cout << str << ", ";

cout << endl;

La salida es:

Papaya, fresa, pasión fruta, plátano, naranja,

La línea,

const char* str = vtr [i];

es donde tiene lugar la supuesta conversión.

Vector de puntero a chars to vector de objetos de cadena

La cuestión de la conversión de un vector de puntero a Chars a objetos de vectores de cuerda es la misma que la cuestión de convertir un vector de matrices de características en objetos de vector de cuerdas. Considere la siguiente declaración:

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

La siguiente declaración tiene la declaración anterior, en forma de objeto de cadena:

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

En este caso, "#include" tiene que estar en la parte superior del programa. Observe el argumento de plantilla y los valores del objeto de cadena.

Ahora, es posible asignar una cadena literal, para convertirse en el contenido de un objeto de cadena, como muestran los siguientes tres segmentos de código:

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

Con este conocimiento, cada literal de cadena se puede leer en una variable de objeto de cadena, como muestra el siguiente código:

vector vtr = "Papaya", "Strawberry", "Passion Fruit", "Banana", "Orange";
para (int i = 0; icadena str = vtr [i];
cout << str << ", ";

cout << endl;

La salida es:

Papaya, fresa, pasión fruta, plátano, naranja,

La línea que hace la conversión del objeto literal a cadena es:

cadena str = vtr [i];

Si los valores de vector eran cadenas de matriz, entonces el siguiente código hará lo mismo:

char fruit1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char fruit2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char fruts3 [] = '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';
vector VTR Fruit1, Fruit2, Fruit3, Fruit4, Fruit5;
para (int i = 0; icadena str = vtr [i];
cout << str << ", ";

cout << endl;

La salida es la misma:

Papaya, fresa, pasión fruta, plátano, naranja,

La línea que hace la conversión de literal a un objeto de cadena sigue siendo la misma:

cadena str = vtr [i];

Vector de literales de cadena a vector de objetos de cadena

Para cambiar realmente un vector de literales de cadena a un vector de objetos de cadena, deberá seguir el siguiente procedimiento:

  • Crear otro vector vacío, pero esta vez, un vector de objetos de cadena.
  • Copiar cada cadena literal desde el vector de constantes y polvos.
  • Destruir el viejo vector de literales.

El siguiente código ilustra esto:

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

VTR.~ vector ();
para (int i = 0; icadena str = vtrnew [i];
cout << str << ", ";

cout << endl;

La salida es:

Papaya, fresa, pasión fruta, plátano, naranja,

La línea del código que destruye el Vector Viejo es:

VTR.~ vector ();

El contenido del vector se destruye, pero no el nombre del vector. Sin embargo, el antiguo nombre vectorial no se puede reutilizar (en el mismo alcance).

Conclusión

Una cadena de matriz literal y un puntero constante a la secuencia de caracteres literal son las mismas cosas debajo. Una cadena de matriz literal es una matriz literal de caracteres, que termina con '\ 0'. Una secuencia literal de constitución constante de caracteres consecutivos delimitados por citas dobles, e.gramo., "a B C". '\ 0' está implícito al final de la constante literaria literal.

Una cadena de matriz literal o un literal de Const-Pointer-Char-Sequence se puede asignar al identificador de una secuencia constante a Char-Char, como se ilustra en el siguiente segmento de código:

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

Realmente no hay necesidad de convertir un vector de cadenas de matriz a un vector de literales de cadena en quotas dobles. Es suficiente leer cada cadena de matriz del vector al identificador de una secuencia constante.

Sin embargo, si realmente se requiere un vector de objetos de cadena de un vector de literales de cadena, entonces la conversión debe hacerse de la siguiente manera:

  • Crear otro vector vacío, pero esta vez, un vector de objetos de cadena.
  • Copie cada cadena literal del vector de los punteros de caracteres constante al vector de los objetos de cadena empujando.
  • Destruir el viejo vector de literales.

Destruir un vector significa destruir su contenido (elementos), pero no el nombre del vector.