Como você converte um vetor de char em um vetor de string em c++?

Como você converte um vetor de char em um vetor de string em c++?
Em C ++, a corda literal: “Eu te amo.”Pode ser codificado da seguinte maneira:
char arrstr [] = 'i',, ',' l ',' o ',' v ',' e ', ",' y ',' o ',' u ','.',' \ 0 ',' a ',' n ',' y ',' t ',' h ',' i ',' n ',' g ',', 'e', ​​'l', ' S ',' e ';

Caracteres em uma variedade de chars, terminando com o caráter nu, \ 0 é uma string. A matriz acima realmente contém as frases: “Eu te amo.”E“ qualquer outra coisa ”separados pelo personagem, '\ 0'.

cout << arrStr << endl;

Imprimiria:

Eu te amo.

ignorando qualquer outra coisa. Esta é a maneira tradicional de ter uma corda em C++. Qualquer outra coisa deve ser ignorada após o caractere '\ 0' se o conteúdo da matriz for considerado uma string.

Com o ponteiro, a string acima seria codificada como:

const char* ptrstr = "eu te amo.";

e

cout << ptrStr << endl;

Imprimiria:

Eu te amo.

Uma variedade de personagens é um ponteiro constante para os personagens, terminando com '\ 0'. Isso explica por que const é usado na afirmação: “Const Char* ptr =“ Eu te amo.”;”. As citações duplas eliminam o uso da estrutura literal da matriz e '\ 0'.

Com a classe String, um objeto de string para a frase acima seria

string objstr = string ("eu te amo.");

e

cout << objStr << endl;

Imprimiria:

Eu te amo.

O objeto String ainda poderia ter sido instanciado como,

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

A pergunta indireta é como converter uma corda de matriz literal em uma citação dupla literal e como converter uma matriz literal ou dupla citação literal em um objeto de string. A questão direta é que, quando esses valores são elementos do vetor, como fazer essas conversões. Este artigo explica que.

Antes de entrar na explicação central, lembre -se de que 'e' é um personagem, enquanto "e" é uma string. Para usar vetores de objetos de string, o programa deve começar com:

#incluir
#incluir
#incluir
usando namespace std;

Conteúdo do artigo

  • Introdução - Veja acima
  • Vetor de chars de matriz para vetor ponteiro chars
  • Vetor de ponteiro para chars para vetor de objetos de string
  • Conclusão

Vetor de chars de matriz para vetor de chars ponteiro

Esta seção explica como converter um vetor de matrizes de caracteres que formam strings para um vetor de constante ponteiro em cordas.

Agora,

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

e

const char* ptrstr = "eu te amo.";

significa a mesma coisa dentro, como o código a seguir mostra:

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 = "eu te amo.";
para (int i = 0; ptrstr [i] != '\ 0'; i ++)
cout << ptrStr[i];
cout << endl;

A saída é:

Eu te amo.
Eu te amo

Todos os segmentos de código para este artigo estão no corpo da função principal (). Para a matriz, o nome da matriz com [i] é usado para ler todos os valores na matriz. O nome do ponteiro com [i] é usado para ler todos os valores na string literal para o ponteiro. Observe que '\ 0' está implícito no final da corda literal. O que é constante para ambos os casos é o ponteiro e não o valor. Um nome de matriz é um ponteiro constante para a sequência de caracteres, que deve terminar com '\ 0'.

Portanto, um vetor de matrizes de chars, onde cada matriz termina com '\ 0' ou um vetor de literais de cordas duplas, deve ser declarada da mesma maneira, como segue:

vetor vtr;

Considere o seguinte vetor de nomes de frutas, onde cada nome de fruta é uma variedade de chars, terminando com '\ 0'.

char fruit1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char fruit2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char frut3 [] = 'p', 'a', 's', 's', 'i', 'o', 'n', ',' f ',' r ',' u ',' eu ',' t ',' \ 0 ';
char frut4 [] = 'b', 'a', 'n', 'a', 'n', 'a', '\ 0';
char fruit5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
vetor vtr fruit1, fruit2, fruit3, fruit4, fruit5;

O vetor de frutas foi construído escrevendo os nomes da matriz como elementos no vetor. Esse mesmo vetor pode ser construído com literais de cordas da seguinte forma:

vetor vtr = "mamão", "morango", "maracujá", "banana", "laranja";

Portanto, não há necessidade de converter um vetor de matrizes de cartas em um vetor de pontos const-ponteiros em chars. Eles são a mesma coisa, por baixo. Como eles são a mesma coisa, um valor de string de matriz pode ser lido em um ponteiro de const-chars, como o código a seguir mostra:

char fruit1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char fruit2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char frut3 [] = 'p', 'a', 's', 's', 'i', 'o', 'n', ',' f ',' r ',' u ',' eu ',' t ',' \ 0 ';
char frut4 [] = 'b', 'a', 'n', 'a', 'n', 'a', '\ 0';
char fruit5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
vetor vtr fruit1, fruit2, fruit3, fruit4, fruit5;
para (int i = 0; iconst char* str = vtr [i];
cout << str << ", ";

cout << endl;

A saída é:

Mampaya, morango, maracujá, banana, laranja,

A linha,

const char* str = vtr [i];

é onde a suposta conversão ocorre.

Vetor de ponteiro para chars para vetor de objetos de string

A questão de converter um vetor de ponteiro em carga em objetos de vetor de cordas é o mesmo que a questão de converter um vetor de matrizes de cargas em objetos de vetor de cordas. Considere a seguinte declaração:

vetor
vtr = "mamão", "morango", "maracujá", "banana", "laranja";

A declaração a seguir tem a declaração acima, em forma de objeto de string:

vetor
vtr = String ("Papaya"), String ("Strawberry"), String ("Maracujá"), String ("Banana"), String ("Orange");

Nesse caso, "#include" deve estar no topo do programa. Observe o argumento do modelo e os valores do objeto String.

Agora, é possível atribuir uma string literal, para se tornar o conteúdo de um objeto String, como mostram os três segmentos de código a seguir:

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

Com esse conhecimento, cada string literal pode ser lida em uma variável de objeto de string, como mostra o código a seguir:

vetor vtr = "mamão", "morango", "maracujá", "banana", "laranja";
para (int i = 0; istring str = vtr [i];
cout << str << ", ";

cout << endl;

A saída é:

Mampaya, morango, maracujá, banana, laranja,

A linha que faz a conversão do objeto literal para a string é:

string str = vtr [i];

Se os valores do vetor eram seqüências de matriz, o código a seguir fará a mesma coisa:

char fruit1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char fruit2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char frut3 [] = 'p', 'a', 's', 's', 'i', 'o', 'n', ',' f ',' r ',' u ',' eu ',' t ',' \ 0 ';
char frut4 [] = 'b', 'a', 'n', 'a', 'n', 'a', '\ 0';
char fruit5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
vetor vtr fruit1, fruit2, fruit3, fruit4, fruit5;
para (int i = 0; istring str = vtr [i];
cout << str << ", ";

cout << endl;

A saída é a mesma:

Mampaya, morango, maracujá, banana, laranja,

A linha que faz a conversão de literal para um objeto de string ainda é a mesma:

string str = vtr [i];

Vetor de literais de string para vetor de objetos de string

Para realmente alterar um vetor de literais de string para um vetor de objetos de string, o procedimento a seguir deverá ser seguido:

  • Crie outro vetor vazio, mas desta vez, um vetor de objetos de string.
  • Copie cada string literal do vetor de pontos const-caracteres, para o vetor de objetos de string, pressionando.
  • Destruir o antigo vetor de literais.

O código a seguir ilustra o seguinte:

vetor vtr = "mamão", "morango", "maracujá", "banana", "laranja";
vetor vtrnew;
para (int i = 0; iVtrNew.push_back (vtr [i]);

vtr.~ vetor ();
para (int i = 0; istring str = vtrNew [i];
cout << str << ", ";

cout << endl;

A saída é:

Mampaya, morango, maracujá, banana, laranja,

A linha para o código que destrói o antigo vetor é:

vtr.~ vetor ();

O conteúdo do vetor é destruído, mas não o nome do vetor. No entanto, o nome do vetor antigo não pode ser reutilizado (no mesmo escopo).

Conclusão

Uma corda de matriz literal e um ponteiro constante para a sequência de caracteres literal são as mesmas coisas por baixo. Uma corda de matriz literal é uma matriz literal de chars, terminando com '\ 0'. Uma sequência literal de sequência de consumo de consumo de caracteres consecutivos delimitados por citações duplas, e.g., "abc". '\ 0' está implícito no final do ponteiro const-to-char-sequence literal.

Um literal literal de sequência de matrizes ou um literal para sequence-to-to-to-to-sequence pode ser atribuído ao identificador de uma sequência de const-po-pointer-char, conforme ilustrado no seguinte segmento de código:

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

Não há realmente necessidade de converter um vetor de strings de matriz em um vetor de literais de cordas em citações duplas. Basta ler cada string de matriz do vetor ao identificador de uma sequência de const-to-ponteiro.

No entanto, se um vetor de objetos de string for realmente necessário de um vetor de literais de string, a conversão deve ser feita da seguinte maneira:

  • Crie outro vetor vazio, mas desta vez, um vetor de objetos de string.
  • Copie cada string literal do vetor de const personagem ponteiros para o vetor de objetos de string empurrando.
  • Destruir o antigo vetor de literais.

Destruir um vetor significa destruir seu conteúdo (elementos), mas não o nome do vetor.