Come si convertisce un vettore char in un vettore di stringa in c++?

Come si convertisce un vettore char in un vettore di stringa in c++?
In C ++, la stringa letterale, "Ti amo."Può essere codificato come segue:
char arrtr [] = 'i', ", 'l', 'o', 'v', 'e',", 'y', 'o', 'u', '.',' \ 0 ',' a ',' n ',' y ',' t ',' h ',' i ',' n ',' g ', ",' e ',' l ',' s ',' e ';

Caratteri in una matrice di carattere, che terminano con il carattere NUL, \ 0 è una stringa. L'array sopra contiene in realtà le frasi: “Ti amo."E" qualsiasi altra cosa "separata dal personaggio, '\ 0'.

cout << arrStr << endl;

Stamperei:

Ti amo.

ignorare qualsiasi altra cosa. Questo è il modo tradizionale di avere una corda in C++. Qualsiasi altra cosa dovrebbe essere ignorata dopo il carattere '\ 0' se il contenuto dell'array deve essere considerato una stringa.

Con il puntatore, la stringa sopra verrebbe codificata come:

const char* ptrstr = "Ti amo.";

E

cout << ptrStr << endl;

Stamperei:

Ti amo.

Una serie di caratteri è un puntatore costante ai caratteri, che terminano con '\ 0'. Questo spiega perché const viene usato nell'affermazione, “const char* ptrstr =“ Ti amo.";". Le doppie citazioni eliminano l'uso della struttura letterale dell'array e '\ 0'.

Con la classe String, un oggetto stringa per la frase sopra

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

E

cout << objStr << endl;

Stamperei:

Ti amo.

L'oggetto stringa avrebbe potuto essere ancora istanziato come,

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

La domanda indiretta è come convertire una stringa di array letterale in una doppia citazione letterale e come convertire un array letterale o doppia citazione letterale a un oggetto stringa. La domanda diretta è: quando questi valori sono elementi del vettore, come eseguire queste conversioni. Questo articolo lo spiega.

Prima di entrare nella spiegazione principale, ricorda che "e" è un personaggio, mentre "e" è una stringa. Per utilizzare i vettori di oggetti stringa, il programma dovrebbe iniziare con:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;

Contenuto dell'articolo

  • Introduzione - Vedi sopra
  • Vettore di cariche di array a vettoriale
  • Vettore di puntatore a caratteri a vettore di oggetti stringa
  • Conclusione

Vettore di schiera di array al vettore dei carichi di punta

Questa sezione spiega come convertire un vettore di array di caratteri che formano stringhe in un vettore di boschetti costanti.

Ora,

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

E

const char* ptrstr = "Ti amo.";

Significa la stessa cosa all'interno, come mostra il seguente codice:

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

L'output è:

Ti amo.
Ti amo

Tutti i segmenti di codice per questo articolo sono nel corpo funzione principale (). Per l'array, il nome dell'array con [i] viene utilizzato per leggere tutti i valori nell'array. Il nome del puntatore con [i] viene utilizzato per leggere tutti i valori nella stringa letterale per il puntatore. Si noti che '\ 0' è implicito alla fine della stringa letterale. Ciò che è costante per entrambi i casi è il puntatore e non il valore. Un nome di array è un puntatore costante alla sequenza di caratteri, che dovrebbe finire con '\ 0'.

Quindi, un vettore di array di caratteri, in cui ogni array termina con '\ 0' o un vettore di letterali a doppia quota, dovrebbe essere dichiarato allo stesso modo, come segue:

vettore VTR;

Considera il seguente vettore di nomi di frutta, in cui ogni nome di frutta è una serie di carattere, che terminano con '\ 0'.

char frut1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char frut2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char frut3 [] = 'p', 'a', 's', 's', 'i', 'o', 'n', ", 'f', 'r', 'u', 'i ',' t ',' \ 0 ';
char frut4 [] = 'b', 'a', 'n', 'a', 'n', 'a', '\ 0';
char frut5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
vettore VTR Fruit1, Fruit2, Fruit3, Fruit4, Fruit5;

Il vettore di frutti è stato costruito scrivendo i nomi dell'array come elementi nel vettore. Questo stesso vettore può essere costruito con i letterali delle stringhe come segue:

vettore VTR = "Papaya", "Strawberry", "Passion Fruit", "Banana", "Orange";

Quindi, non è necessario convertire un vettore di array-of-chars in un vettore di cost-punter-to-chars. Sono la stessa cosa, sotto. Dal momento che sono la stessa cosa, un valore di stringa di array può essere letto in un cost-pointer-to-chars, come mostra il seguente codice:

char frut1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char frut2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char frut3 [] = 'p', 'a', 's', 's', 'i', 'o', 'n', ", 'f', 'r', 'u', 'i ',' t ',' \ 0 ';
char frut4 [] = 'b', 'a', 'n', 'a', 'n', 'a', '\ 0';
char frut5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
vettore VTR Fruit1, Fruit2, Fruit3, Fruit4, Fruit5;
per (int i = 0; iconst char* str = vtr [i];
cout << str << ", ";

cout << endl;

L'output è:

Papaia, fragola, frutta passione, banana, arancione,

La linea,

const char* str = vtr [i];

è dove si svolge la presunta conversione.

Vettore di puntatore a caratteri a vettore di oggetti stringa

La questione di convertire un vettore di puntatore-to-chars in objects vector-of-string, è la stessa della questione di convertire un vettore di array di cariche in oggetti vettori di stringa. Considera la seguente dichiarazione:

vettore
VTR = "Papaya", "Strawberry", "Passion Fruit", "Banana", "Orange";

La seguente dichiarazione ha la dichiarazione di cui sopra, nella forma dell'oggetto stringa:

vettore
VTR = String ("Papaya"), String ("Strawberry"), String ("Passion Fruit"), String ("Banana"), String ("Orange");

In questo caso, "#include" deve essere in cima al programma. Notare l'argomento del modello e i valori dell'oggetto stringa.

Ora è possibile assegnare una stringa letterale, per diventare il contenuto di un oggetto stringa, come mostrano i seguenti tre segmenti di codice:

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

Con questa conoscenza, ogni stringa letterale può essere letta in una variabile oggetto stringa, come mostra il seguente codice:

vettore VTR = "Papaya", "Strawberry", "Passion Fruit", "Banana", "Orange";
per (int i = 0; iString str = vtr [i];
cout << str << ", ";

cout << endl;

L'output è:

Papaia, fragola, frutta passione, banana, arancione,

La linea che fa la conversione da oggetto letterale a stringa è:

String str = vtr [i];

Se i valori vettoriali erano stringhe di array, il seguente codice farà la stessa cosa:

char frut1 [] = 'p', 'a', 'p', 'a', 'y', 'a', '\ 0';
char frut2 [] = 's', 't', 'r', 'a', 'w', 'b', 'e', ​​'r', 'r', 'y', '\ 0' ;
char frut3 [] = 'p', 'a', 's', 's', 'i', 'o', 'n', ", 'f', 'r', 'u', 'i ',' t ',' \ 0 ';
char frut4 [] = 'b', 'a', 'n', 'a', 'n', 'a', '\ 0';
char frut5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
vettore VTR Fruit1, Fruit2, Fruit3, Fruit4, Fruit5;
per (int i = 0; iString str = vtr [i];
cout << str << ", ";

cout << endl;

L'output è lo stesso:

Papaia, fragola, frutta passione, banana, arancione,

La linea che esegue la conversione da un oggetto letterale a un oggetto stringa è sempre la stessa:

String str = vtr [i];

Vettore dei letterali di stringa al vettore di oggetti stringa

Per cambiare veramente un vettore di letterali stringhe in un vettore di oggetti stringa, dovrà essere seguita la seguente procedura:

  • Crea un altro vettore vuoto, ma questa volta, un vettore di oggetti stringa.
  • Copia ogni stringa letterale dal vettore di cost-character-punter, nel vettore degli oggetti stringa, spingendo.
  • Distruggi il vecchio vettore di letterali.

Il seguente codice illustra questo:

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

VTR.~ vector ();
per (int i = 0; istring Str = vtrnew [i];
cout << str << ", ";

cout << endl;

L'output è:

Papaia, fragola, frutta passione, banana, arancione,

La riga per il codice che distrugge il vecchio vettore è:

VTR.~ vector ();

Il contenuto del vettore viene distrutto, ma non il nome vettoriale. Tuttavia, il vecchio nome vettoriale non può essere riutilizzato (nello stesso ambito).

Conclusione

Una stringa di array letterale e un puntatore costante alla sequenza dei caratteri Letterale sono le stesse cose sotto. Una stringa di array letterale è un array letterale di carattere, che termina con '\ 0'. Una sequenza letteralmente cost-pointer-to-car-sequence di caratteri consecutivi delimitati da doppie citazioni, E.G., "ABC". '\ 0' è implicito alla fine del letterale cost-pointer-to-car-sequence.

Una stringa di array letterale o un letterale a punta a carico-carrello può essere assegnato all'identificatore di un conservo-pointer-to-car-sequence, come illustrato nel seguente segmento di codice:

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

Non è davvero necessario convertire un vettore di stringhe di array in un vettore di letterali a doppia quota. È sufficiente leggere ogni stringa di array del vettore all'identificatore di un cost-pointer-to-car-sequence.

Tuttavia, se un vettore di oggetti stringa è davvero richiesto da un vettore di letterali di stringa, la conversione dovrebbe essere eseguita come segue:

  • Crea un altro vettore vuoto, ma questa volta, un vettore di oggetti stringa.
  • Copia ogni stringa letterale dal vettore dei puntatori di caratteri const al vettore degli oggetti stringa spingendo.
  • Distruggi il vecchio vettore di letterali.

Distruggere un vettore significa distruggere il suo contenuto (elementi), ma non il nome del vettore.