Linux E X P R E S

Facebook

Programovanie v jazyku C++: Knižnica string – funkcie find_first_not_of a find_last_not_of

C++

V tomto článku si precvičíme funkcie find_first_not_of a find_last_not_of . 


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!

Diskuze (0) Nahoru