přejít na obsah přejít na navigaci

Linux E X P R E S, Programovanie v jazyku C++: Knižnica string – funkcie find_first_not_of a find_last_not_of

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 . 


reklama

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!

Nahoru

Přidat téma diskuse

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz

Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky Exospace.cz. Mám 24 rokov. Čas trávim v IT škole. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.


  • Distribuce: ubuntu
  • Grafické prostředí: unity


Redakční blog

Redakce

Redakce, 21. prosinec

Pište pro LinuxEXPRES

Baví vás Linux? Pište o něm, není to nic těžkého. LinuxEXPRES hledá nové autory.


Pavel Fric

Pavel Fric, 23. říjen

Nové motivy pro přehrávač Sayonara

Pomozte rozšířit možnost měnit vzhled programu za běhu


Pavel Fric

Pavel Fric, 28. únor

Lollypop


Všechny blogy »

Qlik Sense Tour 2018