Linux E X P R E S

Facebook

Programovanie v jazyku C++: Knižnica string – funkcie begin a end

C++

Doteraz ste sa naučili, ako pracovať s cyklami a taktiež sme sa pozreli na základnú prácu s poliami a reťazcami. Tým to ale nekončí. Pre efektívnejšiu prácu s reťazcami nám knižnica string ponúka bohaté možností. 


Funkcie begin a end

Ak pracujeme s nejakým reťazcom, tak potrebujeme často pristupovať k jednotlivým prvkom reťazca. Májme napríklad takýto blok kódu, ktorý už isto poznáte:

for (size_t i = 0; i < retazec.size(); i++)
{
	cout << retazec[i]; 

}

Ako vidíme na malej ukážke, blok kódu vypisuje jednotlivé prvky reťazca. Nič zložité. Ale napadne vás otázka, či sa to nedá urobiť aj inak? Dá a to s pomocou knižnice string. Nie žeby riešenie s pomocou string nejak zmenšil počet znakov na napísanie cyklu, ale ako si ukážeme, niekde sa hodí omnoho viac ako štandardný zápis. Taktiež podporuje knižnica string napr. reverziu či swap, takže sa nemusíte zaťažovať algoritmami.

Z môjho pohľadu je to skôr na škodu, pretože často programátor nemusí tuš, ako sa robí algoritmický swap, len využije funkciu. Avšak vedieť algoritmy nie je nikdy na škodu. Samozrejme, v prípade projektov pre klientov je šetrenie časom obrovská výhoda. Preto si prejdeme najzaujímavejšie funkcie knižnice string a celý minicyklus bude dlhšie trvať. No ale poďme späť k funkciám begin a end.

Funkcia begin vracia iterátor, ktorý ukazuje na prvý prvok v reťazci. Funkcia end ako už tušíte, vracia iterátor, ktorý je ale za posledným prvkom! Nie posledný prvok, ale ukazuje na symbol \0, keď ešte pamätáte na štruktúru reťazca. Čo je iterátor? Obvykle ukazuje na nejaký prvok v reťazci (alebo poľa, zoznamu a pod…) a vie ľahko prechádzať medzi prvkami pomocou inkrementácie alebo dekrementácie. Je ešte k iterátoru komplikovanejšia definícia, ale zatiaľ je to pre vás nepodstatné.

1. príklad: Zoznámenie sa s funkciami begin a end

#include <iostream>   // hlavickové súbory
#include <string>

using namespace std;   // priestor mien

int main()   // hlavná funkcia main
{
    string retazec = "Hlasim, ze lietadlo pristalo na zem v poriadku!";   // naplníme reťazec

    for (string::iterator ite = retazec.begin(); ite != retazec.end(); ite++)   // cyklus
        cout << *ite;    // vypíšeme na obrazovku 

    return 0;   // koniec programu
}

Výsledok programu:

Hlasim, ze lietadlo pristalo na zem v poriadku!

Rozbor programu:

Ako vidíte, veľa nových veci na vás vyskočilo behom tohto kratučkého programu. Ako prvé si je zvyknúť na pointery, ktoré sú označení *názovPremennej. Pointery si pamätajú adresy v operačnej pamäti, v ktorej sú uložené rôzne dátové typy premenných. No o pointeroch si ešte bližšie porozprávame niekedy v budúcností. Ďalej aby sme úspešne využili funkcie begin a end, potrebujeme iterátor. Keďže chceme pracovať s reťazcom, tak definujeme iterátor takto: string::iterator.

Skúsme sa pohrať trochu s funkciami begin a end.

2. príklad:

#include <iostream>   // hlavickové súbory
#include <string>

using namespace std;   // priestor mien

int main()   // hlavná funkcia main
{
    string retazec = "Hlasim, ze lietadlo pristalo na zem v poriadku!";   // naplníme reťazec

    for (string::iterator ite = retazec.begin(); ite != retazec.end()-10; ite++)   // cyklus
        cout << *ite;    // vypíšeme na obrazovku

    return 0;   // koniec programu
}

Výsledok programu:

Hlasim, ze lietadlo pristalo na zem v

3. príklad:

#include <iostream>   // hlavickové súbory
#include <string>

using namespace std;   // priestor mien

int main()   // hlavná funkcia main
{
    string retazec = "Hlasim, ze lietadlo pristalo na zem v poriadku!";   // naplníme reťazec

    for (string::iterator ite = retazec.begin()+11; ite != retazec.end()-28; ite++)   // cyklus
        cout << *ite;    // vypíšeme na obrazovku

    return 0;   // koniec programu
}

Výsledok programu:

lietadlo

Diskuze (2) Nahoru