Ř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.
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++