Linux E X P R E S

Facebook

Programovanie v jazyku C++: Knižnica string – funkcie find a size

C++

V tomto článku sa pozrieme nato, ako nájsť nejakú časť reťazca s pomocou funkcie find a rovnako si spomenieme už známu funkciu size, ktorú často používame pri reťazcoch. 


Funkcia find

Funkcia find hľadá zhodu nejakého znaku alebo skupiny znakov s argumentom, ktorý zadáme a vrácia číselnú pozíciu typu size_t. Pozícia vyjadruje výskyt prvého znaku hľadanej sekvencie znakov.

1. príklad:

#include <iostream>   // hlavickové súbory
#include <string>
using namespace std;   // priestor mien
int main()   // hlavná funkcia main
{
string retazec = "Čo len s nami bude v budúcností?";   // deklarácia reťazca
size_t pozicia = retazec.find("len");   // hľadáme dane slovo alebo slovne spojenie
size_t pozicia1 = retazec.find("s nami");
cout << "Slovo len sa nachadza na pozicii: " << pozicia << "\n" << "Slovne spojenie s nami sa nachaddza na pozicii: " << pozicia1;   // výstup
return 0;   // koniec programu
}

Výsledok programu:

Slovo len sa nachadza na pozicii: 3
Slovne spojenie s nami sa nachaddza na pozicii: 7

Ak znak alebo sekvencia znakov sa nenachádza v reťazci, funkcia vrácia maximálnu hodnotu size_t. Maximálnu hodnotu size_t vyjadruje v knižnici string konštanta npos.

Preto bude efektívnejšie využívať túto konštantu pri hľadaní znakov s pomocou funkcie find a ukážeme si to v druhom príklade.

2. príklad:

#include <iostream>   // hlavickové súbory
#include <string>
using namespace std;   // priestor mien
int main()   // hlavná funkcia main
{
string retazec = "Slovko fotosynteza je ale pekelne slovo!";
size_t pozicia = retazec.find("fotosynteza");   // hľadáme dane slovo alebo slovne spojenie
size_t pozicia1 = retazec.find("pekelne slovo");
if (pozicia != string::npos && pozicia1 != string::npos)
cout << "Slovo fotosynteza sa nachadza na pozicii: " << pozicia << "\n" << "Slovne spojenie pekelne slovo sa nachadza na pozicii: " << pozicia1;
return 0;   // koniec programu
}

Výsledok programu:

Slovo fotosynteza sa nachadza na pozicii: 7
Slovne spojenie pekelne slovo sa nachadza na pozicii: 26

3. príklad: Na precvičenie funkcie find

#include <iostream>   // hlavickové súbory
#include <string>
using namespace std;   // priestor mien
int main()   // hlavná funkcia main
{
string retazec;   // deklarácia reťazca
cout << "Kolko je 10 * 10? Napis vyslednu cislicu slovom!\n";
cin >> retazec;   // vstup od užívateľa
if (retazec.empty())   // test či užívateľ niečo napísal 
{
cout << "Ale ved ty si nic nezadal! Za trest si ma spust este raz!";
return 0;
}
size_t pozicia= retazec.find("sto");   // využitie funkcie find
if (pozicia == 0 && retazec.size() == 3)   // musíme ošetriť, aby užívateľ nenapísal niečo naviac
cout << "Spravne!";
else
cout << "Zle! Bud si to zle napisal alebo vrat sa do skoly!";
return 0;   // koniec programu
}

Výsledok programu:

Kolko je 10 * 10? Napis vyslednu cislicu slovom!
sto
Spravne!

Funkcia size

Funkciu size už dôverne poznáte, ale nie je na škodu ju spomenúť v tomto minicykle. Funkcia size vracia počet byte v reťazci. Keďže jeden znak má veľkosť jeden byte, tak viete veľmi pohodlne zistiť, koľko je v reťazci počet znakov. Dajme si jednoduchý príklad na záver na odľahčenie.

4. príklad:

#include <iostream>   // hlavickové súbory
#include <string>
using namespace std;   // priestor mien
int main()   // hlavná funkcia main
{
string retazec;
cout << "Zadaj akekolvek slovo!\n";
cin >> retazec;
if (retazec.empty())   // test či užívateľ niečo napísal
{
cout << "Ale ved ty si nic nezadal! Za trest si ma spust este raz!";
return 0;
}
cout << "Vas zvoleny retazec je: " << retazec << "\nVelkost vasho retazca je: " << retazec.size();   // výpis
return 0;   // koniec programu
}

Výsledok programu:

Zadaj akekolvek slovo!
ionizacia
Vas zvoleny retazec je: ionizacia
Velkost vasho retazca je: 9



Diskuze (0) Nahoru