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_of a find_last_of

Autodesk

Programovanie v jazyku C++: Knižnica string – funkcie find_first_of a find_last_of

C++

V tomto článku preberieme dve funkcie, s ktorými môžete pohodlné hľadať znaky v reťazci. Ide o funkciu find_first_of a find_last_of . 


reklama

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!

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



Public Relations

Studium IT pro správce sítí nově i v kombinované formě

Na plzeňské Vyšší odborné škole zdravotnické, managementu a veřejnosprávních studií – vošplzeň.cz – zaznamenáváme dlouhodobý trend poptávky po odbornících v oblasti informačních technologií. Jelikož je v tomto oboru potřeba v souvislosti s neustálým vývojem nových technologií získávat nové znalosti, připravili jsme již od letošního školního roku 2018/2019 3letý vzdělávací program Systémový administrátor IT v kombinované (dálkové) formě.

Pokračování ...


Tiskárna Brno

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 »