logo

Pole řetězců v C++ – 5 různých způsobů, jak vytvořit

V C++ je řetězec obvykle pouze polem (nebo odkazem/ukazuje na) znaků, které končí znakem NULL ‘ ‘. Řetězec je jednorozměrné pole znaků a pole řetězců je dvourozměrné pole znakůkde každý řádek obsahuje nějaký řetězec.

Níže je uvedeno 5 různých způsobů, jak vytvořit Array of Strings v C++:



  1. Použitím Ukazatele
  2. Použitím 2-D pole
  3. Za použití Třída String
  4. Za použití Vektorové třídy
  5. Za použití Třída Array

1. Použití ukazatelů

Ukazatele jsou symbolickou reprezentací adresy. Jednoduše řečeno, ukazatel je něco, co v něm ukládá adresu proměnné. V této metodě je pole řetězcových literálů vytvořeno polem ukazatelů, ve kterýchkaždý ukazatel ukazuje na určitý řetězec.

Příklad:

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;> }>

java jak přepsat

>

>

Výstup

Blue Red Orange Yellow>

Vysvětlení:

  • Počet řetězců je pevný, ale nemusí být. 4 lze vynechat a kompilátor vypočítá správnou velikost.
  • Tyto řetězce jsou konstanty a jejich obsah nelze měnit. Protože řetězcové literály (doslova řetězce v uvozovkách) existují v oblasti paměti určené pouze pro čtení, musíme zde specifikovat const, abychom zabránili nechtěným přístupům, které by mohly způsobit selhání programu.

2. Použití 2D pole

2-D pole je nejjednodušší formou vícerozměrného pole, ve kterém ukládá data v tabulkové formě. Tato metoda je užitečná, když je známa délka všech řetězců a je požadována konkrétní paměťová stopa. Prostor pro řetězce bude přidělen v jednom bloku

Příklad:

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;> }>

>

>

Výstup

třída objektů v jazyce Java
Blue Red Orange Yellow>

Vysvětlení:

  • Počet strun i velikost strun jsou pevně dané. 4 může být opět vynechána a vhodnou velikost vypočítá kompilátor. Druhý rozměr však musí být uveden (v tomto případě 10), aby si kompilátor mohl zvolit vhodné rozložení paměti.
  • Každý řetězec lze upravit, ale zabere celý prostor daný druhým rozměrem. Každá bude v paměti umístěna vedle sebe a nelze změnit velikost.
  • Někdy je žádoucí kontrola nad velikostí paměti, což přidělí oblast paměti s pevným, pravidelným rozložením.

3. Použití třídy String

Řetězec STL popř třída strun lze použít k vytvoření pole měnitelných řetězců. V této metodě není velikost řetězce pevně stanovena a řetězce mohou být změněny, což jej však nějak činí dynamickým. std::string lze použít k vytvoření pole řetězců pomocí vestavěných funkcí.

Příklad:

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] <<>' '>;> }>

jak stará je kylie jenner

>

>

Výstup

Blue Red Orange Yellow>

Vysvětlení:

Pole má pevnou velikost, ale nemusí. Opět platí, že 4 zde může být vynechána a kompilátor určí vhodnou velikost pole. Řetězce jsou také proměnlivé, což umožňuje jejich změnu.

4. Použití třídy vector

A vektor je dynamické pole, které zdvojnásobí svou velikost, kdykoli je přidán nový znak, který překročí jeho limit. Kontejnerový vektor STL lze použít k dynamickému přidělování pole, které se může lišit velikostí.

To je použitelné pouze v C++, protože C nemá třídy. Všimněte si, že syntaxe seznamu inicializátorů zde vyžaduje kompilátor, který podporuje standard C++ 2011, a ačkoli je to docela pravděpodobné, váš kompilátor ano, je třeba si toho být vědomi.

Příklad:

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] << ' '; }>

>

>

Výstup

Blue Red Orange Yellow>

Vysvětlení:

odstranění z binárního vyhledávacího stromu
  • Vektory jsou dynamická pole a umožňují vám kdykoli přidávat a odebírat položky.
  • Ve vektorech lze použít jakýkoli typ nebo třídu, ale daný vektor může obsahovat pouze jeden typ.

5. Použití třídy Array

Pole je homogenní směs dat, která je nepřetržitě uložena v paměťovém prostoru. Pole kontejneru STL lze použít k přidělení pole pevné velikosti. Může být použit velmi podobně jako vektor, ale velikost je vždy pevná.

Příklad:

C++




převést nfa na dfa
// 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;> }>

>

>

Výstup

Blue Red Orange Yellow>

To nejsou v žádném případě jediné způsoby, jak vytvořit sbírku řetězců. C++ nabízí několik tříd kontejnerů, z nichž každá má různé kompromisy a funkce a všechny existují, aby splnily požadavky, které budete mít ve svých projektech. Prozkoumejte a bavte se!

Závěr: Ze všech metod se zdá, že Vector je nejlepší způsob, jak vytvořit pole řetězců v C++.

s.