Matrice de șiruri în C++ - 5 moduri diferite de a crea

În C++, un șir este, de obicei, doar o matrice de (sau o referință/punctează către) caractere care se termină cu caracterul NULL „ ‘. Un șir este o matrice unidimensională de caractere și o matrice de șiruri este o matrice bidimensională de caractere unde fiecare rând conține un șir.

Mai jos sunt cele 5 moduri diferite de a crea o matrice de șiruri de caractere în C++:

  1. Folosind Indicatori
  2. Folosind Matrice 2-D
  3. Folosind Clasa String
  4. Folosind Clasa Vector
  5. Folosind Clasa Array

1. Folosind pointeri

Pointerii sunt reprezentarea simbolică a unei adrese. Cu cuvinte simple, un pointer este ceva care stochează adresa unei variabile în el. În această metodă, o matrice de literali șir este creată de o matrice de pointeri în care fiecare indicator indică un anumit șir.

Exemplu:

C++




// C++ program to demonstrate> // array of strings using> // pointers character array> #include> // Driver code> int> main()> {> > // Initialize array of pointer> > const> char> * colour[4]> > = {> 'Blue'> ,> 'Red'> ,> 'Orange'> ,> 'Yellow'> };> > // Printing Strings stored in 2D array> > for> (> int> i = 0; i <4; i++)> > std::cout < < colour[i] < <> ' '> ;> > return> 0;> }>

Ieșire

Blue Red Orange Yellow 

Explicaţie:

  • Numărul de șiruri este fix, dar nu trebuie să fie. Cele 4 pot fi omise, iar compilatorul va calcula dimensiunea corectă.
  • Aceste șiruri sunt constante și conținutul lor nu poate fi modificat. Deoarece literalele de șir (literal, șirurile citate) există într-o zonă de memorie doar pentru citire, trebuie să specificăm const aici pentru a preveni accesele nedorite care pot bloca programul.

2. Folosind o matrice 2D

O matrice 2-D este cea mai simplă formă a unei matrice multidimensionale în care stochează datele într-o formă tabelară. Această metodă este utilă atunci când lungimea tuturor șirurilor este cunoscută și se dorește o anumită amprentă de memorie. Spațiul pentru șiruri va fi alocat într-un singur bloc

Exemplu:

C++




// C++ program to demonstrate> // array of strings using> // 2D character array> #include> // Driver code> int> main()> {> > // Initialize 2D array> > char> colour[4][10]> > = {> 'Blue'> ,> 'Red'> ,> 'Orange'> ,> 'Yellow'> };> > // Printing Strings stored in 2D array> > for> (> int> i = 0; i <4; i++)> > std::cout < < colour[i] < <> ' '> ;> > return> 0;> }>

Ieșire

Blue Red Orange Yellow 

Explicaţie:

  • Atât numărul de șiruri, cât și dimensiunea șirurilor sunt fixe. Cele 4, din nou, pot fi omise, iar dimensiunea adecvată va fi calculată de compilator. A doua dimensiune, totuși, trebuie dată (în acest caz, 10), astfel încât compilatorul să poată alege un aspect de memorie adecvat.
  • Fiecare șir poate fi modificat, dar va ocupa întregul spațiu dat de a doua dimensiune. Fiecare va fi așezat unul lângă celălalt în memorie și nu se poate schimba dimensiunea.
  • Uneori, controlul asupra amprentei memoriei este de dorit, iar acest lucru va aloca o regiune de memorie cu un aspect fix, obișnuit.

3. Folosind clasa String

Șirul STL sau clasa string poate fi folosit pentru a crea o matrice de șiruri mutabile. În această metodă, dimensiunea șirului nu este fixă, iar șirurile pot fi modificate, ceea ce îl face, într-un fel, să fie dinamic în natură. std::string poate fi folosit pentru a crea o matrice de șiruri folosind funcții încorporate.

Exemplu:

C++




// C++ program to demonstrate> // array of strings using> // string class> #include> #include> // Driver code> int> main()> {> > // Initialize String Array> > std::string colour[4]> > = {> 'Blue'> ,> 'Red'> ,> 'Orange'> ,> 'Yellow'> };> > // Print Strings> > for> (> int> i = 0; i <4; i++)> > std::cout < < colour[i] < <> ' '> ;> }>

Ieșire

Blue Red Orange Yellow 

Explicaţie:

Matricea este de dimensiune fixă, dar nu trebuie să fie. Din nou, cele 4 de aici pot fi omise, iar compilatorul va determina dimensiunea adecvată a matricei. Șirurile sunt, de asemenea, mutabile, permițându-le să fie schimbate.

4. Folosind clasa vectorială

A vector este o matrice dinamică care își dublează dimensiunea ori de câte ori este adăugat un nou caracter care depășește limita. Vectorul container STL poate fi folosit pentru a aloca dinamic o matrice care poate varia în dimensiune.

Acest lucru este utilizabil numai în C++, deoarece C nu are clase. Rețineți că sintaxa listei de inițializare necesită aici un compilator care acceptă standardul C++ 2011 și, deși este destul de probabil să o facă compilatorul dvs., este ceva de care trebuie să fiți conștient.

Exemplu:

C++




// C++ program to demonstrate> // array of strings using> // vector class> #include> #include> #include> // Driver code> int> main()> {> > // Declaring Vector of String type> > // Values can be added here using> > // initializer-list> > // syntax> > std::vector colour{> 'Blue'> ,> 'Red'> ,> > 'Orange'> };> > // Strings can be added at any time> > // with push_back> > colour.push_back(> 'Yellow'> );> > // Print Strings stored in Vector> > for> (> int> i = 0; i std::cout < < colour[i] < < ' '; }>

Ieșire

Blue Red Orange Yellow 

Explicaţie:

  • Vectorii sunt matrice dinamice și vă permit să adăugați și să eliminați elemente în orice moment.
  • Orice tip sau clasă poate fi folosit în vectori, dar un vector dat poate conține doar un tip.

5. Utilizarea clasei Array

O matrice este un amestec omogen de date care este stocat continuu în spațiul de memorie. Matricea de containere STL poate fi utilizată pentru a aloca o matrice de dimensiune fixă. Poate fi folosit foarte similar cu un vector, dar dimensiunea este întotdeauna fixă.

Exemplu:

C++




// C++ program to demonstrate> // array of string using STL array> #include> #include> #include> // Driver code> int> main()> {> > // Initialize array> > std::array colour{> 'Blue'> ,> 'Red'> ,> > 'Orange'> ,> 'Yellow'> };> > // Printing Strings stored in array> > for> (> int> i = 0; i <4; i++)> > std::cout < < colour[i] < <> ' '> ;> > return> 0;> }>

Ieșire

Blue Red Orange Yellow 

Acestea nu sunt în niciun caz singurele modalități de a face o colecție de șiruri. C++ oferă mai multe clase de containere, fiecare dintre ele având diverse compromisuri și caracteristici, și toate există pentru a îndeplini cerințele pe care le veți avea în proiectele dvs. Explorează și distrează-te!

Concluzie: Dintre toate metodele, Vector pare să fie cea mai bună modalitate de a crea o matrice de șiruri de caractere în C++.

s.