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ů
- Deklarovat a inicializovat řetězce v C ++
- Operace na řetězcích v C ++
- Velikost řetězce
- Zřetězení řetězců
- Připojování řetězců
- Hledání řetězců
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ěhu | Velikost 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 ++
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 11Zř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_stPř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 << endlVý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 4294967295První 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) { coutfun_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 4Tí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.