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