Jak przekonwertować wektor char wektor ciągów w C++?

Jak przekonwertować wektor char wektor ciągów w C++?
W C ++ dosłownym smyczkowym „kocham cię.”Można kodować w następujący sposób:
char arrstr [] = 'i', ", 'l', 'o', 'v', 'e',", 'y', ',', 'u', '.',' \ 0 ',' a ',' n ',' y ',' t ',' h ',' i ',' n ',' g ', ",' e ',' l ',' s ', „e';

Znaki w szeregu znaków, kończące się znakiem NUL, \ 0 to ciąg. Powyższa tablica zawiera frazy: „Kocham cię.”I„ cokolwiek innego ”oddzielone postacią,„ \ 0 ”.

Cout << arrStr << endl;

wydrukowałby:

Kocham cię.

ignorowanie czegokolwiek innego. To jest tradycyjny sposób posiadania sznurka w C++. Cokolwiek innego powinno zostać zignorowane po znaku „\ 0”, jeśli zawartość tablicy ma być uważana za ciąg.

Z wskaźnikiem powyższy ciąg byłby zakodowany jako:

const char* ptrstr = "kocham cię.";

I

Cout << ptrStr << endl;

wydrukowałby:

Kocham cię.

Szereg znaków jest stałym wskaźnikiem dla postaci, kończąc na „\ 0”. To wyjaśnia, dlaczego Const jest używana w oświadczeniu „const char* ptrstr =„ Kocham cię.”;”. Podwójne cytaty eliminują użycie literalnej struktury tablicy i „\ 0”.

Z klasą string

String objStr = String ("Kocham cię.");

I

Cout << objStr << endl;

wydrukowałby:

Kocham cię.

Obiekt ciągów mógł być nadal utworzony jako,

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

Pośrednie pytanie brzmi: jak przekonwertować literał sznurka tablicy na dosłowny podwójny cytat i jak przekonwertować literał literałowy lub podwójny cytat na obiekt string. Bezpośrednie pytanie brzmi, gdy te wartości są elementami wektora, jak wykonywać te konwersje. Ten artykuł to wyjaśnia.

Przed wejściem do podstawowego wyjaśnienia pamiętaj, że „E” jest postacią, podczas gdy „E” jest ciągiem. Aby użyć wektorów obiektów ciągów, program powinien zacząć od:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;

Treść artykułu

  • Wprowadzenie - patrz wyżej
  • Wektor znaków tablicy do wektora wskaźnika znaków
  • Wektor wskaźnika do znaków do wektora obiektów ciągów
  • Wniosek

Wektor tablicy do wektora wskaźnika znaków

W tej sekcji wyjaśniono, jak przekonwertować wektor tablic znakowych, który tworzy ciągami na wektor stałego punktu do strin.

Teraz,

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

I

const char* ptrstr = "kocham cię.";

oznacz to samo w środku, jak pokazuje następujący kod:

char arrstr [] = 'i', ", 'l', 'o', 'v', 'e',", 'y', ',', 'u', '.',' \ 0 ',;
for (int i = 0; arstr [i] != '\ 0'; i ++)
Cout << arrStr[i];
Cout << endl;
const char* ptrstr = "kocham cię.";
for (int i = 0; ptrstr [i] != '\ 0'; i ++)
Cout << ptrStr[i];
Cout << endl;

Wyjście to:

Kocham cię.
Kocham cię

Wszystkie segmenty kodu dla tego artykułu znajdują się w organu funkcyjnym Main (). W przypadku tablicy nazwa tablicy z [i] służy do odczytu wszystkich wartości w tablicy. Nazwa wskaźnika z [i] służy do odczytania wszystkich wartości w literale ciągów dla wskaźnika. Zwróć uwagę, że „\ 0” jest ukryte na końcu dosłownego ciągu. To, co jest stałe w obu przypadkach, to wskaźnik, a nie wartość. Nazwa tablicy jest stałym wskaźnikiem sekwencji znaków, która powinna zakończyć się „\ 0”.

Tak więc wektor tablic znanych, gdzie każda tablica kończy się „\ 0” lub wektorem literałów podwójnie cytatowych, powinien zostać zadeklarowany w ten sam sposób, jak następuje:

wektor vtr;

Rozważ następujący wektor nazw owoców, w którym każda nazwa owoców jest szeregiem znaków, kończąca się „\ 0”.

Char owoce1 [] = „P”, „A”, „P”, „A”, „Y”, „A”, „\ 0”;
Char owoce2 [] = 's', „t”, „r”, „a”, „w”, „b”, „e”, „r”, „r”, „y”, „\ 0” ;
Char owoce3 [] = 'p', „a”, „s”, „s”, „i”, „o”, „n”, „,„ f ”,„ r ”,„ u ”,„ i ',' t ',' \ 0 ';
Char owoce4 [] = „B”, „A”, „N”, „A”, „N”, „A”, „\ 0”;
Char owoce5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
wektor VTR Fruit1, Fruit2, Fruit3, Fruit4, Fruit5;

Wektor owoców został skonstruowany przez pisząc nazwy tablicy jako elementy w wektorze. Ten sam wektor można konstruować za pomocą literałów smyczkowych w następujący sposób:

wektor vtr = „papaya”, „truskawki”, „namiętność”, „banana”, „pomarańczowy”;

Tak więc nie ma potrzeby przekształcania wektora tablicowców na wektor konstantów na szyjki. Są to samo, pod spodem. Ponieważ są one takie same, wartość łańcucha tablicy można odczytać w wskaźnikach konstytucyjnych do kanałów, jak pokazuje następujący kod:

Char owoce1 [] = „P”, „A”, „P”, „A”, „Y”, „A”, „\ 0”;
Char owoce2 [] = 's', „t”, „r”, „a”, „w”, „b”, „e”, „r”, „r”, „y”, „\ 0” ;
Char owoce3 [] = 'p', „a”, „s”, „s”, „i”, „o”, „n”, „,„ f ”,„ r ”,„ u ”,„ i ',' t ',' \ 0 ';
Char owoce4 [] = „B”, „A”, „N”, „A”, „N”, „A”, „\ 0”;
Char owoce5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
wektor VTR Fruit1, Fruit2, Fruit3, Fruit4, Fruit5;
dla (int i = 0; iconst char* str = vtr [i];
Cout << str << ", ";

Cout << endl;

Wyjście to:

Papaja, truskawka, namiętność, banan, pomarańcza,

Linia,

const char* str = vtr [i];

tam, gdzie ma miejsce rzekome konwersja.

Wektor wskaźnika do znaków do wektora obiektów ciągów

Pytanie o przekształcenie wektora wskaźnika na wektory wektor-string-obiekty, jest takie samo, jak kwestia przekształcenia wektora tablic książek na obiekty wektorowe. Rozważ następujące stwierdzenie:

wektor
vtr = „papaya”, „truskawki”, „namiętność”, „banana”, „pomarańczowy”;

Poniższa deklaracja zawiera powyższą deklarację, w formie obiektu String:

wektor
vtr = String („papaya”), string („Strawberry”), string („Passion Fruit”), string („banana”), string („Orange”);

W takim przypadku „#include” musi znajdować się na szczycie programu. Zwróć uwagę na argument szablonu i wartości obiektu ciągów.

Teraz można przypisać literałowi ciąg, stać się treścią obiektu ciągów, jak pokazują następujące trzy segmenty kodu:

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

Dzięki tej wiedzy każdy literał ciągów można odczytać w zmiennej obiektu ciągów, jak pokazuje następujący kod:

wektor vtr = „papaya”, „truskawki”, „namiętność”, „banana”, „pomarańczowy”;
dla (int i = 0; iString str = vtr [i];
Cout << str << ", ";

Cout << endl;

Wyjście to:

Papaja, truskawka, namiętność, banan, pomarańcza,

Linia, która wykonuje konwersję z obiektu dosłownego na ciąg, to:

String str = vtr [i];

Jeśli wartości wektorowe były strunami tablicowymi, następujący kod zrobi to samo:

Char owoce1 [] = „P”, „A”, „P”, „A”, „Y”, „A”, „\ 0”;
Char owoce2 [] = 's', „t”, „r”, „a”, „w”, „b”, „e”, „r”, „r”, „y”, „\ 0” ;
Char owoce3 [] = 'p', „a”, „s”, „s”, „i”, „o”, „n”, „,„ f ”,„ r ”,„ u ”,„ i ',' t ',' \ 0 ';
Char owoce4 [] = „B”, „A”, „N”, „A”, „N”, „A”, „\ 0”;
Char owoce5 [] = 'o', 'r', 'a', 'n', 'g', 'e', ​​'\ 0';
wektor VTR Fruit1, Fruit2, Fruit3, Fruit4, Fruit5;
dla (int i = 0; iString str = vtr [i];
Cout << str << ", ";

Cout << endl;

Wyjście jest takie samo:

Papaja, truskawka, namiętność, banan, pomarańcza,

Linia, która wykonuje konwersję z dosłownego na obiekt ciągów, jest nadal taka sama:

String str = vtr [i];

Wektor literałów strunowych do wektora obiektów ciągów

Aby naprawdę zmienić wektor literałów strun na wektor obiektów ciągów, należy przestrzegać następującej procedury:

  • Utwórz kolejny pusty wektor, ale tym razem wektor obiektów ciągów.
  • Skopiuj każdy literał sznurka z wektora punktów const-znaków, do wektora obiektów ciągów, popychając.
  • Zniszcz stary wektor literałów.

Poniższy kod to ilustruje:

wektor vtr = „papaya”, „truskawki”, „namiętność”, „banana”, „pomarańczowy”;
wektor vtrnew;
dla (int i = 0; ivtrnew.push_back (vtr [i]);

vtr.~ wektor ();
dla (int i = 0; iString str = vtrnew [i];
Cout << str << ", ";

Cout << endl;

Wyjście to:

Papaja, truskawka, namiętność, banan, pomarańcza,

Linia kodu niszcząca stary wektor to:

vtr.~ wektor ();

Zawartość wektora jest zniszczona, ale nie nazwa wektora. Jednak starej nazwy wektora nie można ponownie wykorzystać (w tym samym zakresie).

Wniosek

Litera sznurka macierzy i stały wskaźnik do sekwencji postaci, to te same rzeczy pod spodem. Literał sznurka tablicy to literał tablicy, kończący się „\ 0”. Ograniczona sekwencja o wskaźnikach konster-punkt do sekwencji kolejnych znaków wyznaczona podwójnymi cytatami, e.G., "ABC". „\ 0” jest dorozumiany na końcu literału wskaźnika const-wskaźnika do ceny.

Literał literałowy sznurka tablicy lub literał wskaźnika do cechy do charakteru można przypisać do identyfikatora sekwencji wskaźnika do charakteru, jak pokazano w następującym segmencie kodu:

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

Naprawdę nie ma potrzeby przekształcania wektora strun macierzy na wektor literałów sznurkowych w podwójnych cytatach. Wystarczy odczytać każdy ciąg tablicy wektora do identyfikator.

Jeśli jednak wektor obiektów ciągów jest naprawdę wymagany z wektora literałów ciągów, konwersja należy wykonać w następujący sposób:

  • Utwórz kolejny pusty wektor, ale tym razem wektor obiektów ciągów.
  • Skopiuj każdy literał łańcucha z wektora wskaźników znaków Const do wektora obiektów ciągów, pchając.
  • Zniszcz stary wektor literałów.

Niszczenie wektora oznacza zniszczenie jego zawartości (elementów), ale nie nazwa wektora.