Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

9. diel - Textové reťazce v jazyku C ++

V predchádzajúcom cvičení, Riešené úlohy k 8. lekcii C ++, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

S textovými reťazcami sme sa už v kurze letmo stretli, načítali sme ich a vypisovali pomocou premennej typu string. S reťazci možno v C ++ pracovať niekoľkými spôsobmi. My si v tomto C ++ tutoriálu uvedieme zatiaľ ten najjednoduchší, tzv. Statický reťazec, ktorým je práve typ string.

Knižnica string

Keď budeme chcieť uložiť do premennej textový reťazec "Hello ITnetwork", iba vytvoríme objekt typu string a priradíme mu reťazec. Zatiaľ nás nemusí trápiť, že vlastne nevieme, čo objekt je. Dozviete sa to v sekcii venovanej OOP. Nesmieme zabudnúť includovat hlavičkový súbor string:

#include <string>
#include <iostream>
using namespace std;

int main()
{
    string pozdrav = "Hello World!";
    cout << pozdrav << endl;
    cin.get();
    return 0;
}

Tak ako sme to v C ++ videli už niekoľkokrát, vypísaný text zobrazí na obrazovke a čaká sa na stlačenie klávesu od užívateľa.

Konzolová aplikácia
Hello Wordl!

Práca s jednotlivými znakmi

S reťazcom môžeme zaobchádzať úplne rovnako ako s poľom, pretože interne poľom je:) Nie je teda problém vypísať napríklad prvý znak alebo znaky meniť. Pri inej manipulácii s reťazcami je lepšie použiť metódy (funkcie), ktoré typ string poskytuje. My si na konci uvedieme tie základné.

Teraz si poďme ukázať, ako napríklad zmeniť prvý znak a medzi každým písmenom vypísať medzeru:

string pozdrav = "Hello World!";
pozdrav[0] = 'h';
for (int i = 0; i < 12; i++ )
    cout << pozdrav[i] << ' ';
cout << endl;
cin.get();

výsledok:

Konzolová aplikácia
h e l l o   W o r l d !

Zmenou prvého znaku na 'h' sme zmenšili prvé písmeno textu. Vďaka hranatým okrúhlych zátvoriek sme potom mohli k reťazcu pristúpiť ako k poľu a vypísať jednotlivé znaky oddelené medzerou.

Čítanie / výpis reťazca

Reťazce môžeme jednoducho načítavať / vypisovať ako sme boli zvyknutí doteraz, použijeme k tomu objekt cin. Premennú pre reťazec založíme ako typ string.

Nasledujúci program si nechá zadať vaše meno a potom vás pozdravia:

string jmeno;
cout << "Zadajte Vaše meno: ";
cin >> jmeno;
cout << "Zdravim " << jmeno << endl;
cin.ignore(0xFF,'\n');
cin.get();

Výsledok nás možno prekvapí:

Konzolová aplikácia
Zadajte Vaše meno: David Capka
Zdravim David

Všimnime si, že bolo načítané iba prvé slovo. Pri vstupe pomocou cin sa čítanie ukončí na prvom tzv. Bielom znaku. To sú znaky, ktoré nemožno vytlačiť, ako napr. Medzera, enter alebo tabulátor. Tiež si všimnime riadky cin.ignore(0xFF,'\n'). Tá udáva, že všetok text, ktorý ešte na vstupe čaká, sa má ignorovať, a to až po znak '\n', ktorý označuje enter. Ak by sme túto metódu nezavolali, cin.get() by automaticky prečítal ďalší znak, ktorý by bol vo fronte a program by sa ihneď ukončil.

Ak by sme chceli prečítať celý riadok, využijeme na to funkcii getline(), ktorá ako prvý parameter prijíma objekt cin a ako druhý reťazec, do ktorého text uloží.

string jmeno;
cout << "Zadajte Vaše meno: ";
getline(cin, jmeno);
cout << "Zdravim " << jmeno << endl;
cin.get();

Štandardné funkcie pre prácu s reťazcami

Typ string nám poskytuje mnoho pripravených funkcií pre prácu s reťazcami, ktoré zjednodušia naše programy.

length() - dĺžka reťazca

Dĺžku reťazca môžeme zistiť pomocou metódy length() (podrobnejší opis rozdielu medzi metódou a funkciou je opäť súčasťou kurzu OOP).

string pozdrav = "Hello World";
unsigned int delka = pozdrav.length();
cout << delka;

clear() - zmazanie reťazca

Ak chceme uvoľniť miesto, použijeme metódu clear(). Tá zmaže všetok obsah, ktorý je v premennej uložený.

string pozdrav = "Hello World";
pozdrav.clear();

Spojenie reťazcov

2 textové reťazce môžeme spojiť do jedného pomocou operácie +, ako sme zvyknutí napríklad pri aritmetických operácií.

string prvniPozdrav = "Hello ";
string druhyPozdrav = "World";
string pozdrav = prvniPozdrav + druhyPozdrav;
cout << pozdrav;

find() - vyhľadanie podreťazca

V texte si môžeme nechať vyhľadať nejaký znak alebo reťazec. C ++ ho od začiatku do konca prehľadá a ak znak alebo reťazec nájde, vráti jeho pozíciu. Ak reťazec znak neobsahuje, vráti metóda hodnotu väčšiu, než je posledný index reťazca.

string text = "Wolfgang Amadeus Mozart";
unsigned int pozice = text.find("Amadeus");
if (pozice < text.length())
    cout << "Nájdených na pozíciu " << pozice << endl;
else
    cout << "Nenájdené" << endl;
cin.get();

Asi vás neprekvapí, že sa pozícia indexuje od nuly.

Konzolová aplikácia
Nájdených na pozíciu 9

Ďalej string poskytuje sadu obdobných metód, iba s inou funkcionalitou:

  • rfind(): nájde posledný výskyt
  • find_first_of(): nájde prvý výskyt ľubovoľného znaku z parametra
  • find_last_of(): nájde posledný výskyt ľubovoľného znaku z parametra
  • substr(): vráti podreťazec, určený začiatkom a dĺžkou

Nákupný reťazcov

Porovná 2 reťazca podľa abecedy. Môžeme využiť porovnávací operácie ako väčší (>) a menšie (<).

string prvni = "Hello";
string druhy = "World";
bool porovnani= prvni < druhy;
cout << porovnani;

Metódy pre prácu s reťazcami je oveľa viac. Podrobne sa s nimi zoznámime v jednom z ďalších článkov.

Ďalšie interpretácia reťazcov

C ++ poskytuje aj podporu pre nízkoúrovňový prístup k reťazcom, teda umožňuje je okrem objektov string definovať i len ako obyčajná polia typu char. Typ string je v C ++ len obal, ktorý vnútorne používa práve tento nízkoúrovňový prístup. Ak budete pracovať s knižnicami pre C alebo ak budete volať systémové volania, budete nútení použiť len polia typu char. Táto interpretácia je používaná v C (pretože C string nemá), a tak vás presmerujem na diel o textových reťazcoch v C. Základný opis môžete nájsť v lekcii Textové reťazca, téma je ďalej rozšírené v lekcii Textové reťazca druhýkrát.

Pre dnešok by to bolo všetko.

V budúcej lekcii, Textové reťazce v jazyku C ++ druhýkrát - Práca so znakmi , sa budeme venovať ďalej textovým reťazcom a to na niekoľkých praktických programoch.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 76x (15.91 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C++

 

Predchádzajúci článok
Riešené úlohy k 8. lekcii C ++
Všetky články v sekcii
Základné konštrukcie jazyka C ++
Preskočiť článok
(neodporúčame)
Textové reťazce v jazyku C ++ druhýkrát - Práca so znakmi
Článok pre vás napísal Patrik Valkovič
Avatar
Užívateľské hodnotenie:
1 hlasov
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity