Funkcia find_first_not_of
Ak funkcia find_first_of hľadá prvý výskyt znaku definovaného v argumente funkcie, tak funkcia find_first_not_of nájde prvý výskyt znaku v skúmanom reťazci, ktorý sa nezhoduje so žiadnym znakom v argumente funkcie.
1. príklad: Prvý kontakt s funkciou find_first_not_of
#include <iostream> #include <string> using namespace std; int main() { string retazec1 = "Tak sefe, pracicka je hotova!\n"; size_t i = retazec1.find_first_not_of("Tak sf,prcijehotv"); cout << i << " znak: " << retazec1[i] << "\n"; size_t j = retazec1.find_first_not_of("Tak sf,prcijehotv!"); cout << j << " znak: " << retazec1[j] << "\n"; size_t k = retazec1.find_first_not_of("Tak sf,prcijehotv!\n"); cout << k << " znak: " << retazec1[k] << "\n"; return 0; }
Výsledok programu:
28 znak: ! 29 znak: 4294967295 znak:
Rozbor programu:
Všimnite si ako sa funkcia správa. Ak funkcia nenájde zhodu, vráti string::npos, čiže maximálnu hodnotu size_t.
2. príklad: Rôzne možností argumentu funkcie find_first_not_of
#include <iostream> #include <string> using namespace std; int main() { string retazec1 = "Wau, to je ale krasna duha!"; size_t i = retazec1.find_first_not_of("jtoaelrksnduh ,", 10); cout << i << " znak: " << retazec1[i] << "\n"; size_t j = retazec1.find_first_not_of("jtoaelrksnduh ,", 12, 5); cout << j << " znak: " << retazec1[j] << "\n"; size_t k = retazec1.find_first_not_of('a', retazec1.size()-2); cout << k << " znak: " << retazec1[k] << "\n"; return 0; }
Výsledok programu:
26 znak: ! 12 znak: l 26 znak: !
Rozbor programu:
Argumenty funkcie find_first_not_of fungujú rovnako, ako pri funkcii find_first_of, ktorú sme mali v minulom dieli.
Funkcia find_last_not_of
Funkcia find_last_not_of hľadá posledný výskyt znaku, ktorý nekorešponduje zo žiadnym znakom v jej argumente. Tak poďme sa pozrieť na príklad.
3. príklad: Testujeme funkciu find_last_not_of
#include <iostream> #include <string> using namespace std; int main() { string retazec1 = "Aj ty hrajes Euro Truck Simulator 2?\n"; size_t i = retazec1.find_last_not_of("?2 \n"); cout << i << " znak: " << retazec1[i] << "\n"; size_t j = retazec1.find_last_not_of("\n"); cout << j << " znak: " << retazec1[j] << "\n"; size_t k = retazec1.find_last_not_of("r"); cout << k << " znak: " << retazec1[k] << "\n"; return 0; }
Výsledok programu:
32 znak: r 35 znak: ? 36 znak:
Tak ako funkcia find_last_of má i funkcia find_last_not_of rovnaké argumenty. Na ukážku si pozrime príklad, ktorý už poznáte (2.príklad) a môžete tak porovnáť výsledky.
4. príklad:
#include <iostream> #include <string> using namespace std; int main() { string retazec1 = "Wau, to je ale krasna duha!"; size_t i = retazec1.find_last_not_of("jtoaelrksnduh ,", 10); cout << i << " znak: " << retazec1[i] << "\n"; size_t j = retazec1.find_last_not_of("jtoaelrksnduh ,", 12, 5); cout << j << " znak: " << retazec1[j] << "\n"; size_t k = retazec1.find_last_not_of('a', retazec1.size()-2); cout << k << " znak: " << retazec1[k] << "\n"; return 0; }
Výsledok programu:
0 znak: W 12 znak: l 24 znak: h
A na záver trochu kreatívnejší príklad.
5. príklad: Ukážka neefektívneho napísania Ahoj svet! (Hello world!), avšak dobrá na zopakovanie funkcii find_first_not_of a find_last_not_of.
#include <iostream> #include <string> using namespace std; int main() { string retazec1 = "Ahojky, prave som vstal do noveho dna nasho sveta!"; size_t i = retazec1.find_first_not_of("h"); size_t j = retazec1.find_first_not_of("A"); size_t k = retazec1.find_first_not_of("Ah"); size_t l = retazec1.find_first_not_of("Aho"); size_t m = retazec1.find_first_not_of("Ahojky,"); size_t n = retazec1.find_last_not_of("!eatv"); size_t o = retazec1.find_last_not_of("!aet"); size_t p = retazec1.find_last_not_of("!at"); size_t r = retazec1.find_last_not_of("!a"); size_t s = retazec1.find_last_not_of(""); cout << retazec1[i] << retazec1[j] << retazec1[k] << retazec1[l] << retazec1[m] << retazec1[n] << retazec1[o] << retazec1[p] << retazec1[r] << retazec1[s]; return 0; }
Výsledok programu:
Ahoj svet!