Řetězce v C++

Řetězce v C++

Řetězce C++ jsou sekvence znaků uložené v poli znaků. Řetězce se používají k ukládání slov a textu. Používají se také k ukládání dat, jako jsou čísla a další typy informací. Řetězce v C++ lze definovat buď pomocí std::string třída nebo Pole znaků ve stylu C.

Řetězce v C++

1. Řetězce ve stylu C

Tyto řetězce jsou uloženy jako obyčejné staré pole znaků zakončené a prázdný znak „ “ . Jsou to typy řetězců, které C++ zdědilo z jazyka C.

Syntax:

char str[] = 'techcodeview.com'; 

Příklad:

C++




// C++ Program to demonstrate strings> #include> using> namespace> std;> int> main()> {> > char> s[] => 'techcodeview.com'> ;> > cout < < s < < endl;> > return> 0;> }>

Výstup

techcodeview.com 

2. std::string Třída

Toto jsou nové typy řetězců, které jsou v C++ zavedeny jako třída std::string definovaná v záhlaví souboru. To poskytuje mnoho výhod oproti konvenčním řetězcům ve stylu C, jako je dynamická velikost, členské funkce atd.

Syntax:

std::string str('techcodeview.com'); 

Příklad:

C++




// C++ program to create std::string objects> #include> using> namespace> std;> int> main()> {> > string str(> 'techcodeview.com'> );> > cout < < str;> > return> 0;> }>

Výstup

techcodeview.com 

Ještě jeden způsob, jak můžeme vytvořit řetězce, které mají stejný znak opakující se znovu a znovu.

Syntax:

std::string str(number,character); 

Příklad:

C++




#include> using> namespace> std;> int> main()> {> > string str(5,> 'g'> );> > cout < < str;> > return> 0;> }>

Výstup:

ggggg 

Způsoby, jak definovat řetězec v C++

Řetězce lze v C++ definovat několika způsoby. K řetězcům lze přistupovat ze standardní knihovny pomocí třídy string. Pole znaků lze také použít k definování řetězců. Řetězec poskytuje bohatou sadu funkcí, jako je vyhledávání a manipulace, což jsou běžně používané metody. Navzdory tomu, že je méně pokročilá než třída string, je tato metoda stále široce používána, protože je efektivnější a snadněji použitelná. Způsoby, jak definovat řetězec v C++, jsou:

  • Použití klíčového slova String
  • Použití strun ve stylu C

1. Použití řetězce Klíčové slovo

Je vhodnější definovat řetězec pomocí klíčového slova string namísto použití klíčového slova pole, protože se snadno píše a rozumí.

Syntax:

string s = 'techcodeview.com'; string s('techcodeview.com'); 

Příklad:

C++




// C++ Program to demonstrate use of string keyword> #include> using> namespace> std;> int> main()> {> > string s => 'techcodeview.com'> ;> > string str(> 'techcodeview.com'> );> > cout < <> 's = '> < < s < < endl;> > cout < <> 'str = '> < < str < < endl;> > return> 0;> }>

Výstup

s = techcodeview.com str = techcodeview.com 

2. Použití strun ve stylu C

Použití funkcí knihoven řetězců ve stylu C, jako je strcpy(), strcmp() a strcat() k definování řetězců. Tato metoda je složitější a není tak široce používaná jako ostatní dvě, ale může být užitečná při práci se starším kódem nebo když potřebujete výkon.

char s[] = {'g', 'f', 'g', ' '}; char s[4] = {'g', 'f', 'g', ' '}; char s[4] = 'gfg'; char s[] = 'gfg'; 

Příklad:

C++




// C++ Program to demonstrate C-style string declaration> #include> using> namespace> std;> int> main()> {> > char> s1[] = {> 'g'> ,> 'f'> ,> 'g'> ,> ' '> };> > char> s2[4] = {> 'g'> ,> 'f'> ,> 'g'> ,> ' '> };> > char> s3[4] => 'gfg'> ;> > char> s4[] => 'gfg'> ;> > cout < <> 's1 = '> < < s1 < < endl;> > cout < <> 's2 = '> < < s2 < < endl;> > cout < <> 's3 = '> < < s3 < < endl;> > cout < <> 's4 = '> < < s4 < < endl;> > return> 0;> }>

Výstup

s1 = gfg s2 = gfg s3 = gfg s4 = gfg 

Další příklad řetězce ve stylu C:

C++




#include> using> namespace> std;> int> main()> {> > string S => 'Geeeks for Geeks'> ;> > cout < <> 'Your string is= '> ;> > cout < < S < < endl;> > return> 0;> }>

Výstup

Your string is= Geeeks for Geeks 

Jak převzít vstup řetězce v C++

Vstup řetězce znamená přijetí řetězce od uživatele. V C++. Máme různé typy přijímání vstupu od uživatele, které závisí na řetězci. Nejběžnějším způsobem je převzít vstup pomocí jíst klíčové slovo s operátorem extrakce (>>) v C++. Metody, jak vzít řetězec jako vstup, jsou:

  • jíst
  • getline
  • stringstream

1. Použití Cin

Nejjednodušší způsob, jak převzít vstup řetězce, je použít jíst příkaz spolu s operátorem extrakce proudu (>>).

Syntax:

cin>>s; 

Příklad:

C++




// C++ Program to demonstrate string input using cin> #include> using> namespace> std;> int> main() {> > string s;> > > cout < <> 'Enter String'> < cin>>s; cout < <'String is: ' < return 0; }>

Výstup

Enter String String is: 

Výstup:

Enter String techcodeview.com String is: techcodeview.com 

2. Pomocí getline

The funkce getline() v C++ se používá ke čtení řetězce ze vstupního proudu. Je deklarován v hlavičkovém souboru.

Syntax:

getline(cin,s); 

Příklad:

C++




// C++ Program to demonstrate use of getline function> #include> using> namespace> std;> int> main()> {> > string s;> > cout < <> 'Enter String'> < < endl;> > getline(cin, s);> > cout < <> 'String is: '> < < s < < endl;> > return> 0;> }>

Výstup

Enter String String is: 

Výstup:

Enter String techcodeview.com String is: techcodeview.com 

3. Použití stringstream

The třída stringstream v C++ se používá k převzetí více řetězců jako vstupu najednou.

Syntax:

stringstream stringstream_object(string_name); 

Příklad:

C++




// C++ Program to demonstrate use of stringstream object> #include> #include> #include> using> namespace> std;> int> main()> {> > string s => ' techcodeview.com to the Moon '> ;> > stringstream obj(s);> > // string to store words individually> > string temp;> > //>> operátor bude číst z objektu stringstream> > while> (obj>> teplota) {> > cout < < temp < < endl;> > }> > return> 0;> }>

Výstup

techcodeview.com to the Moon 

Jak předávat řetězce funkcím?

Stejným způsobem, jakým předáváme pole funkci, lze řetězce v C++ předávat funkcím jako pole znaků. Zde je příklad programu:

Příklad:

C++




// C++ Program to print string using function> #include> using> namespace> std;> void> print_string(string s)> {> > cout < <> 'Passed String is: '> < < s < < endl;> > return> ;> }> int> main()> {> > string s => 'techcodeview.com'> ;> > print_string(s);> > return> 0;> }>

Výstup

Passed String is: techcodeview.com 

Ukazatele a řetězce

Ukazatele v C++ jsou symbolické reprezentace adres. Umožňují programům simulovat volání po referenci a také vytvářet a manipulovat s dynamickými datovými strukturami. Pomocí ukazatelů můžeme získat první znak řetězce, což je počáteční adresa řetězce. Jak je znázorněno níže, daný řetězec lze otevřít a vytisknout pomocí ukazatelů.

Příklad:

C++




// C++ Program to print string using pointers> #include> using> namespace> std;> int> main()> {> > string s => 'Geeksforgeeks'> ;> > // pointer variable declared to store the starting> > // address of the string> > char> * p = &s[0];> > // this loop will execute and print the character till> > // the character value is null this loop will execute and> > // print the characters> > while> (*p !=> ' '> ) {> > cout < < *p;> > p++;> > }> > cout < < endl;> > return> 0;> }>

Výstup

Geeksforgeeks 

Rozdíl mezi řetězcovým a znakovým polem v C++

Hlavní rozdíl mezi řetězcem a polem znaků je v tom, že řetězce jsou neměnné, zatímco pole znaků nikoli.

Tětiva

Pole znaků

Řetězce definují objekty, které mohou být reprezentovány jako řetězcové proudy. Znak null ukončuje pole znaků.
V řetězcích nedochází k žádnému rozpadu pole, protože řetězce jsou reprezentovány jako objekty.

Hrozba

rozpad pole

je přítomen v případě pole znaků

Třída string poskytuje řadu funkcí pro manipulaci s řetězci. Pole znaků nenabízejí vestavěné funkce pro manipulaci s řetězci.
Paměť je alokována dynamicky. Velikost pole znaků musí být přidělena staticky.

Zjistěte více o rozdíl mezi řetězci a poli znaků v C++

Řetězcové funkce C++

C++ poskytuje některé vestavěné funkce, které se používají pro manipulaci s řetězci, jako jsou funkce strcpy() a strcat() pro kopírování a zřetězení řetězců. Někteří z nich jsou:

Funkce

Popis

délka() Tato funkce vrací délku řetězce.
swap() Tato funkce se používá k záměně hodnot 2 řetězců.
velikost() Používá se pro zjištění velikosti řetězce
změnit velikost () Tato funkce slouží ke změně velikosti délky řetězce až na daný počet znaků.
nalézt() Používá se k nalezení řetězce, který je předán v parametrech
zatlačit zpátky() Tato funkce se používá k vložení předávaného znaku na konec řetězce
pop_back() Tato funkce se používá k odstranění posledního znaku z řetězce
Průhledná() Tato funkce se používá k odstranění všech prvků řetězce.
strncmp() Tato funkce porovnává maximálně první počet bajtů obou předávaných řetězců.
strncpy() Tato funkce je podobná funkci strcpy() s tím rozdílem, že se zkopíruje maximálně n bajtů src
strrchr() Tato funkce vyhledá poslední výskyt znaku v řetězci.
prasklý() Tato funkce připojí kopii zdrojového řetězce na konec cílového řetězce
nalézt() Tato funkce se používá k vyhledání určitého podřetězce uvnitř řetězce a vrací pozici prvního znaku podřetězce.
nahradit() Tato funkce se používá k nahrazení každého prvku v rozsahu [první, poslední), který se rovná staré hodnotě, novou hodnotou.
substr() Tato funkce se používá k vytvoření podřetězce z daného řetězce.
porovnat() Tato funkce se používá k porovnání dvou řetězců a vrací výsledek ve formě celého čísla.
vymazat() Tato funkce se používá k odstranění určité části řetězce.

Funkce iterátoru řetězců C++

V C++ vestavěné funkce iterátoru řetězců poskytují programátorovi snadný způsob úpravy a procházení prvků řetězce. Tyto funkce jsou:

Funkce Popis
začít() Tato funkce vrací iterátor ukazující na začátek řetězce.
konec() Tato funkce vrací iterátor, který ukazuje na konec řetězce.
rfind() Tato funkce se používá k nalezení posledního výskytu řetězce.
rbegin() Tato funkce vrací zpětný iterátor ukazující na konec řetězce.
poskytnout() Tato funkce vrací zpětný iterátor ukazující na začátek řetězce.
cbegin() Tato funkce vrací const_iterator ukazující na začátek řetězce.
trochu() Tato funkce vrací const_iterator ukazující na konec řetězce.
crbegin() Tato funkce vrací const_reverse_iterator ukazující na konec řetězce.
Crend() Tato funkce vrací const_reverse_iterator ukazující na začátek řetězce.

Příklad:

C++




// C++ Program to demonstrate string iterator functions> #include> using> namespace> std;> int> main()> {> > // declaring an iterator> > string::iterator itr;> > // declaring a reverse iterator> > string::reverse_iterator rit;> > string s => 'techcodeview.com'> ;> > itr = s.begin();> > > cout < <> 'Pointing to the start of the string: '> < < *itr < < endl;> > itr = s.end() - 1;> > cout < <> 'Pointing to the end of the string: '> < < *itr < < endl;> > rit = s.rbegin();> > cout < <> 'Pointing to the last character of the string: '> < < *rit < < endl;> > rit = s.rend() - 1;> > cout < <> 'Pointing to the first character of the string: '> < < *rit < < endl;> > return> 0;> }>

Výstup

Pointing to the start of the string: G Pointing to the end of the string: s Pointing to the last character of the string: s Pointing to the first character of the string: G 

Funkce kapacity řetězce

V C++ se funkce kapacity řetězce používají ke správě velikosti a kapacity řetězce. Mezi hlavní funkce kapacity patří:

Funkce Popis
délka() Tato funkce se používá k vrácení velikosti řetězce
kapacita() Tato funkce vrací kapacitu, která je řetězci přidělena kompilátorem
změnit velikost () Tato funkce nám umožňuje zvětšit nebo zmenšit velikost řetězce
shrink_to_fit() Tato funkce snižuje kapacitu a rovná ji minimu.

Příklad:

C++




#include> using> namespace> std;> int> main()> {> > string s => 'techcodeview.com'> ;> > > // length function is used to print the length of the string> > cout < <> 'The length of the string is '> < < s.length() < < endl;> > > // capacity function is used to print the capacity of the string> > cout < <> 'The capacity of string is '> < < s.capacity() < < endl;> > > // the string.resize() function is used to resize the string to 10 characters> > s.resize(10);> > > cout < <> 'The string after using resize function is '> < < s < < endl;> > > s.resize(20);> > > cout < <> 'The capacity of string before using shrink_to_fit function is '> < < s.capacity() < < endl;> > > // shrink to fit function is used to reduce the capacity of the container> > s.shrink_to_fit();> > cout < <> 'The capacity of string after using shrink_to_fit function is '> < < s.capacity() < < endl;> > return> 0;> }>

Výstup

The length of the string is 13 The capacity of string is 15 The string after using resize function is GeeksforGe The capacity of string before using shrink_to_fit function is 30 The capacity of string... 

Na závěr tento článek vysvětluje, jak lze řetězce definovat v C++ pomocí znakových polí a řetězcových tříd. Třída string poskytuje pokročilejší funkce, zatímco pole znaků poskytuje základní funkce, ale je efektivní a snadno se používá. V tomto článku jsme také diskutovali o různých metodách, jak získat vstup od uživatele.

Další informace o třídě std::string naleznete v článku – std::string třídy v C++