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++:
- Použitím Ukazatele
- Použitím 2-D pole
- Za použití Třída String
- Za použití Vektorové třídy
- 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.