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

konference Datová centra pro business

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!

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 astrotech.cz. Mám 25 rokov. Medzi moje záľuby patrí astronómia, sci-fi literatúra a programovanie.


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



Public Relations

Září – měsíc bezpečnosti se Sophos Central

SophosNepropásněte sérii webinářů zaměřených na aktuální bezpečnostní trendy a jednotnou správu zabezpečení vaše IT – každé pondělí a zdarma.
Nebylo by skvělé zabezpečit vaše firewally, počítače, servery a mobilní zařízení pomocí nejlepších kyberbezpečnostních řešení na trhu a spravovat vše z jednoho intuitivního uživatelského rozhraní?

Pokračování ...


Sophos

Redakční blog

Pavel Fric

Pavel Fric, 21. srpen

Sayonara Player 1.5.1

Přehrávač, jak má být. Poslední dobou vývoj šlape


Pavel Fric

Pavel Fric, 26. leden

MuseScore 3

První aktualizace třetí řady notačního editoru MuseScore


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.


Všechny blogy »

Cyber Days 2019