Funkcia find_first_of
Spôsoby ako vyhľadavať znaky či časti reťazca je viacero. S funkciou find_first_of viete nájsť prvý výskyt nejakého hľadaného znaku. Funkcia find_first_of vráti prvú pozíciu zhodného znaku v argumente. A pozor, narozdiel od iných funkcii nerozlišuje poradie znakov v argumente funkcie! Čo to v praxi znamená, že porovnáva každý jednotlivý znak reťazca so všetkými znakmi definované ako reťazec v argumente funkcie find_first_of až pokým nenajde prvú zhodu.
1. príklad: Testujeme funkciu find_first_of
#include <iostream> #include <string> using namespace std; int main() { string retazec = "Som sklamany z dnesneho dna!"; size_t i = retazec.find_first_of("!kom"); cout << i << " znak: " << retazec[i] << "\n"; return 0; }
Výsledok programu:
1 znak: o
2. príklad: Ďalšie možností funkcie find_first_of
#include <iostream> #include <string> using namespace std; int main() { string retazec1 = "Som hladny ako stado vlkov!"; size_t i = retazec1.find_first_of("mo", 10); // prvy sposob cout << i << " znak: " << retazec1[i] << "\n"; string retazec2 = "Rad chodim do Tatier."; size_t j = retazec2.find_first_of("iT", 10, 1); // druhy sposob cout << j << " znak: " << retazec2[j] << "\n"; string retazec3 = "Juuu konecne som kupil novy pocitac! Tak sa tesim."; size_t k = retazec3.find_first_of('!', 30); // treti sposob cout << k << " znak: " << retazec3[k] << "\n"; return 0; }
Výsledok programu:
13 znak: o 17 znak: i 35 znak: !
Rozbor programu:
1. spôsob: Druhý argument je pozícia v reťazci, odkiaľ sa má začať procedúra hľadania.
2. spôsob: Druhý argument je pozícia v reťazci, od ktorej sa má začať hľadať a v treťom argumente sa pýtame, koľko znakov z reťazca argumentu funkcie find_first_to máme testovať. My sme dali číslo 1, čo znamená, že testujeme len znak i. V treťom príklade si bližšie priblížime fungovanie.
3. spôsob: Prvý argument je hľadaný znak a druhý argument pozícia v reťazci, od ktorej začneme hľadať.
3. príklad: Dodatočné experimenty s argumentami funkcie find_first_of
#include <iostream> #include <string> using namespace std; int main() { string retazec = "Som sebe samemu panom."; size_t i = retazec.find_first_of("eopuan", 0, 1); cout << i << " znak: " << retazec[i] << "\n"; size_t j = retazec.find_first_of("eopuan", 0, 2); cout << j << " znak: " << retazec[j] << "\n"; retazec.assign("upSom sebe samemu panom."); size_t k = retazec.find_first_of("eopuan", 0, 3); cout << k << " znak: " << retazec[k] << "\n"; return 0; }
Výsledok programu:
5 znak: e 1 znak: o 1 znak: p
Ukážme si komplexnejší príklad na funkciu find_first_of.
4. príklad: Komplexnejší príklad na funkciu find_first_of
#include <iostream> #include <string> using namespace std; int main() { string retazec = "Dnes je den vsezravcov. Nerobim si zarty."; cout << retazec << "\n"; cout << "Hm nemaju tam byt miesto bodiek vykricniky? Nevadi opravime!" << "\n"; size_t hladam = retazec.find_first_of('.'); for (size_t i = 0; i < retazec.size(); i++) { if (i == hladam) { retazec[i] = '!'; hladam = retazec.find_first_of('.', i+1); } } cout << retazec << "\n"; return 0; }
Výsledok programu:
Dnes je den vsezravcov. Nerobim si zarty. Hm nemaju tam byt miesto bodiek vykricniky? Nevadi opravime! Dnes je den vsezravcov! Nerobim si zarty!
Funkcia find_last_of
Ak funkcia find_first_of hľadá prvý výskyt znaku, tak u funkcie find_last_of to bude presne naopak.
5. príklad: Predstavenie funkcie find_last_of
#include <iostream> #include <string> using namespace std; int main() { string retazec = "Pozri hore, tam je Polarka!"; size_t i = retazec.find_last_of("tP"); cout << i << " znak: " << retazec[i]; return 0; }
Výsledok programu:
19 znak: P
Tak ako funkcia find_first_of tak aj funkcia find_last_of ponúka rovnaké možností argumentov.
6. príklad: Ďalšie možností funkcie find_last_of
#include <iostream> #include <string> using namespace std; int main() { string retazec1 = "Rozum ti chyba chlapce rozum!"; size_t i = retazec1.find_last_of("rdmeu", 13); cout << i << " znak: " << retazec1[i] << "\n"; string retazec2 = "Slniecko svieti, cas ist vonku!."; size_t j = retazec2.find_last_of("is", 14, 2); cout << j << " znak: " << retazec2[j] << "\n"; string retazec3 = "Tesim sa domov na svoju macicku, urcite je uz hladna, chudinka."; size_t k = retazec3.find_last_of(',', retazec3.size()-1); cout << k << " znak: " << retazec3[k] << "\n"; return 0; }
Výsledok programu:
4 znak: m 14 znak: i 52 znak: ,
Rozbor programu:
Funkcia find_last_of funguje podobne ako funkcia find_first_of až na jeden argument. Zoberme si túto čásť:
size_t i = retazec1.find_last_of("rdmeu", 13);
kde druhý argument nevyjadruje začiatočnú pozíciu od ktorej sa ma začať prehľadávať ale konečnú pozíciu!