Vše, co potřebujete vědět o řetězcích v C ++



Tento článek vám poskytne podrobné a komplexní znalosti Strings v C ++ a také příklady různých operací.

Termín znamená seřazenou posloupnost znaků. Posloupnost znaků lze reprezentovat pomocí objektu třídy v C ++. Třída, která k tomu poskytuje definici, se nazývá třída String. Třída String ukládá znaky jako posloupnost bajtů s funkcí umožňující přístup k jednobajtovému znaku. V C ++ jsou uzavírací oddělovače dvojité uvozovky. V tomto článku „Strings in C ++“ budu diskutovat o následujících tématech:

Rozdíl řetězců třídy a znaků

Řetězec třída Pole znaků
Řetězec třídy je třída, která definuje objekty, které lze reprezentovat jako proud znakůPole znaků je jednoduše pole znaků.
V případě řetězců je paměť přidělována dynamicky, takže na požádání lze přidělit více paměti za běhuVelikost pole znaků musí být přidělena staticky, takže v případě potřeby nelze přidělit více paměti za běhu
Třída String definuje řadu funkcí, které umožňují různé operace na řetězcích.Pole znaků nenabízí mnoho vestavěných funkcí pro manipulaci s řetězci
Řetězce jsou ve srovnání s implementací pomalejší než pole znaků.Implementace pole znaků je rychlejší.

Deklarovat a inicializovat řetězce v C ++

strings-in-c++Inicializace řetězce v C ++ je docela jednoduchá !. Můžeme použít kteroukoli z následujících metod.





pomocí jmenného prostoru std řetězec std_string

nebo

std :: string std_string
#include using namespace std int main () {char ch [12] = {'H', 'e', ​​'l', 'l', 'o', '', 'b', 'y', '' , 'c', 'h', ''} řetězec st = 'Dobrý den od st' std :: řetězec std_st = 'Dobrý den od std_st' cout<< ch << endl cout << st << endl cout << std_st << endl return 0 }

Výstup:



Dobrý den od ch Dobrý den od st Dobrý den od std_st

V tomto příkladu jsme si ukázali jak pole znaků (ch), tak řetězec clmetody inicializace zadku (st a std_st). Nejprve jsme použili metodu pole znaků definováním pole znaků ch [12], které obsahuje 12 prvků a končí nulovým znakem. Ve druhé části jsme použili metodu třídy řetězců.

ansible vs loutka vs kuchař

Operace na řetězcích v C ++

Výhodou použití třídy řetězce je, že v C ++ existuje několik předdefinovaných funkcí k jejich manipulaci. Díky tomu je programování snadné a efektivní. Pojďme se věnovat některým důležitým funkcím manipulace s řetězci a pochopit je na několika příkladech.

Velikost řetězce: K vrácení velikosti objektu lze použít metody size () i length ().



náklady<< st.length() <

Výstup:

11 11

Zřetězení řetězců: Můžeme zřetězit dva nebo více řetězců jednoduše pomocí operátoru + mezi nimi

řetězec new_string = st + 'a' + std_st cout<< new_string <

Výstup:

Hello by st a Hello by std_st

Připojování řetězců: Členskou funkci třídy .append (string) lze použít ke zřetězení a přidání řetězce v určitém umístění znaků v řetězci. Pokud programátor vloží str.append (str1, p, n), znamená to, že n počet znaků z pozice p v řetězci str1 bude připojen na konec str.

string str = 'Baví mě učit se' string str1 = 'Python, C ++ nebo C' str.append (str1, 8, 3) cout<< str << endl

Výstup:

jak používat energii v Javě
Ráda se učím C ++

Hledání řetězců: Můžeme použít členskou funkci find () k nalezení prvního výskytu řetězce uvnitř jiného. find () bude hledat jehlu řetězce uvnitř řetězce sena počínaje pozicí pos a vrátí pozici prvního výskytu jehly. Funkce rfind () funguje podobně, až na to, že vrací poslední výskyt předaného řetězce.

string haystack = 'Ahoj světe!' řetězec jehla = 'o' cout<< haystack.find(needle)<

Výstup:

4 4 7 4294967295

První příkaz cout jednoduše vytiskne „4“, což je index prvního výskytu „o“ v řetězci kupy sena. Pokud chceme „o“ ve „světě“, musíme upravit „pos“ tak, aby ukazovalo za první výskyt. haystack.find (jehla, 4) by znovu vrátil 4, zatímco haystack.find (jehla, 5) by dal 7. Pokud podřetězec nebyl nalezen, find () vrací std :: string :: npos.

Npos je speciální hodnota rovnající se maximální hodnotě představované typem size_type. Tady je 4294967295. Obecně se používá buď jako indikátor konce řetězce u funkcí, které očekávají index řetězce, nebo jako indikátor chyby u funkcí, které vracejí index řetězce.

Tento jednoduchý kód prohledá řetězec pro všechny výskyty „C ++“ v str2 a vytiskne jejich pozice:

string str2 = 'C ++ je objektově orientovaný programovací jazyk a zahrnuje třídy, dědičnost, polymorfismus, abstrakci dat a zapouzdření. C ++ umožňuje zpracování výjimek a přetížení funkcí, které v C.C ++ není možné, je výkonný, efektivní a rychlý jazyk. '' for (string :: size_type i = 0, tfind (tfind = wikistr.find ('C ++', i))! = string :: npos i = tfind + 1) {std :: cout<< 'Found occurrence of 'C++' at position ' << tfind << std::endl }

Výstup:

Nalezený výskyt 'C ++' na pozici 0 Nalezený výskyt 'C ++' na pozici 132 Nalezený výskyt 'C ++' na pozici 217
#include using namespace std class base {public: void fun_1 () {cout<< 'base class function 1n' } virtual void fun_2() { cout << 'base class function 2n' } virtual void fun_3() { cout << 'base class function 3n' } virtual void fun_4() { cout << 'base class function 4n' } } class derived : public base { public: void fun_1() { cout << 'derived class function 1n' } void fun_2() { cout << 'derived class function 2n' } void fun_4(int x) { cout fun_2 () // Pozdní vazba (RTP) ptr-> fun_3 () // Pozdní vazba (RTP) ptr-> fun_4 () // Předčasná vazba, ale toto volání funkce je // nelegální (vytváří chybu), protože ukazatel // je základního typu a funkce je // odvozené třídy // p-> fun_4 (5)}

Výstup:

funkce základní třídy 1 funkce odvozené třídy 2 funkce základní třídy 3 funkce základní třídy 4

Tímto ukončujeme tento článek o řetězcích v C ++. Doufám, že jste pochopili různé operace, které na něm lze provádět. Pokud se chcete dozvědět více, podívejte se na Java Training by Edureka, důvěryhodná online vzdělávací společnost. Edureka školicí a certifikační kurz je navržen tak, aby vás vyškolil jak pro základní, tak pro pokročilé koncepty Java spolu s různými rámci Java, jako je Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů tohoto blogu a my se vám ozveme co nejdříve.