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

EDU Trainings IT školení

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 . 


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 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

QuAI – efektivní řešení pro vývoj aplikací umělé inteligence

qnap_quai100.pngAplikace a služby na bázi umělé inteligence (AI) jsou na trhu stále žádanější, a proto rychle roste i poptávka po výpočetních prostředích, která umožňují efektivně budovat, cvičit, optimalizovat a zavádět modely pro strojové učení. QNAP na tuto poptávku reaguje a nabízí výpočetní platformu s názvem QuAI založenou na výkonu a flexibilitě zařízení QNAP NAS. Díky QuAI se z NAS zařízení QNAP stává výkonný akcelerátor strojového učení.

Pokračování ...


EDU Trainings

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 »

Lokia