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:
{CPP_CONSOLE}
string pozdrav = "Hello World!";
pozdrav[0] = 'h';
for (int i = 0; i < 12; i++ )
cout << pozdrav[i] << ' ';
cout << endl;
cin.get();
{/CPP_CONSOLE}
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:
{CPP_CONSOLE}
string jmeno;
cout << "Zadajte Vaše meno: ";
cin >> jmeno;
cout << "Zdravim " << jmeno << endl;
cin.ignore(0xFF,'\n');
cin.get();
{/CPP_CONSOLE}
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ží.
{CPP_CONSOLE}
string jmeno;
cout << "Zadajte Vaše meno: ";
getline(cin, jmeno);
cout << "Zdravim " << jmeno << endl;
cin.get();
{/CPP_CONSOLE}
Š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).
{CPP_CONSOLE}
string pozdrav = "Hello World";
unsigned int delka = pozdrav.length();
cout << delka;
{/CPP_CONSOLE}
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í.
{CPP_CONSOLE}
string prvniPozdrav = "Hello ";
string druhyPozdrav = "World";
string pozdrav = prvniPozdrav + druhyPozdrav;
cout << pozdrav;
{/CPP_CONSOLE}
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.
{CPP_CONSOLE}
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();
{/CPP_CONSOLE}
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ýskytfind_first_of()
: nájde prvý výskyt ľubovoľného znaku z parametrafind_last_of()
: nájde posledný výskyt ľubovoľného znaku z parametrasubstr()
: 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 (<
).
{CPP_CONSOLE}
string prvni = "Hello";
string druhy = "World";
bool porovnani= prvni < druhy;
cout << porovnani;
{/CPP_CONSOLE}
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é 79x (15.91 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C++