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!







