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

POINT.X

Programovanie v jazyku C++: Knižnica string – funkcie find a size

C++

V tomto článku sa pozrieme nato, ako nájsť nejakú časť reťazca s pomocou funkcie find a rovnako si spomenieme už známu funkciu size, ktorú často používame pri reťazcoch. 


reklama

Funkcia find

Funkcia find hľadá zhodu nejakého znaku alebo skupiny znakov s argumentom, ktorý zadáme a vrácia číselnú pozíciu typu size_t. Pozícia vyjadruje výskyt prvého znaku hľadanej sekvencie znakov.

1. príklad:

#include <iostream>   // hlavickové súbory
#include <string>
using namespace std;   // priestor mien
int main()   // hlavná funkcia main
{
string retazec = "Čo len s nami bude v budúcností?";   // deklarácia reťazca
size_t pozicia = retazec.find("len");   // hľadáme dane slovo alebo slovne spojenie
size_t pozicia1 = retazec.find("s nami");
cout << "Slovo len sa nachadza na pozicii: " << pozicia << "\n" << "Slovne spojenie s nami sa nachaddza na pozicii: " << pozicia1;   // výstup
return 0;   // koniec programu
}

Výsledok programu:

Slovo len sa nachadza na pozicii: 3
Slovne spojenie s nami sa nachaddza na pozicii: 7

Ak znak alebo sekvencia znakov sa nenachádza v reťazci, funkcia vrácia maximálnu hodnotu size_t. Maximálnu hodnotu size_t vyjadruje v knižnici string konštanta npos.

Preto bude efektívnejšie využívať túto konštantu pri hľadaní znakov s pomocou funkcie find a ukážeme si to v druhom príklade.

2. príklad:

#include <iostream>   // hlavickové súbory
#include <string>
using namespace std;   // priestor mien
int main()   // hlavná funkcia main
{
string retazec = "Slovko fotosynteza je ale pekelne slovo!";
size_t pozicia = retazec.find("fotosynteza");   // hľadáme dane slovo alebo slovne spojenie
size_t pozicia1 = retazec.find("pekelne slovo");
if (pozicia != string::npos && pozicia1 != string::npos)
cout << "Slovo fotosynteza sa nachadza na pozicii: " << pozicia << "\n" << "Slovne spojenie pekelne slovo sa nachadza na pozicii: " << pozicia1;
return 0;   // koniec programu
}

Výsledok programu:

Slovo fotosynteza sa nachadza na pozicii: 7
Slovne spojenie pekelne slovo sa nachadza na pozicii: 26

3. príklad: Na precvičenie funkcie find

#include <iostream>   // hlavickové súbory
#include <string>
using namespace std;   // priestor mien
int main()   // hlavná funkcia main
{
string retazec;   // deklarácia reťazca
cout << "Kolko je 10 * 10? Napis vyslednu cislicu slovom!\n";
cin >> retazec;   // vstup od užívateľa
if (retazec.empty())   // test či užívateľ niečo napísal 
{
cout << "Ale ved ty si nic nezadal! Za trest si ma spust este raz!";
return 0;
}
size_t pozicia= retazec.find("sto");   // využitie funkcie find
if (pozicia == 0 && retazec.size() == 3)   // musíme ošetriť, aby užívateľ nenapísal niečo naviac
cout << "Spravne!";
else
cout << "Zle! Bud si to zle napisal alebo vrat sa do skoly!";
return 0;   // koniec programu
}

Výsledok programu:

Kolko je 10 * 10? Napis vyslednu cislicu slovom!
sto
Spravne!

Funkcia size

Funkciu size už dôverne poznáte, ale nie je na škodu ju spomenúť v tomto minicykle. Funkcia size vracia počet byte v reťazci. Keďže jeden znak má veľkosť jeden byte, tak viete veľmi pohodlne zistiť, koľko je v reťazci počet znakov. Dajme si jednoduchý príklad na záver na odľahčenie.

4. príklad:

#include <iostream>   // hlavickové súbory
#include <string>
using namespace std;   // priestor mien
int main()   // hlavná funkcia main
{
string retazec;
cout << "Zadaj akekolvek slovo!\n";
cin >> retazec;
if (retazec.empty())   // test či užívateľ niečo napísal
{
cout << "Ale ved ty si nic nezadal! Za trest si ma spust este raz!";
return 0;
}
cout << "Vas zvoleny retazec je: " << retazec << "\nVelkost vasho retazca je: " << retazec.size();   // výpis
return 0;   // koniec programu
}

Výsledok programu:

Zadaj akekolvek slovo!
ionizacia
Vas zvoleny retazec je: ionizacia
Velkost vasho retazca je: 9



Nahoru

(Jako ve škole)
Průměr: 1,67 | Hodnotilo: 6
 

Top články z OpenOffice.cz

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



 
 

Eduard Boldižár

Eduard Boldižár

Som redaktorom stránky Exospace.cz. Mám 23 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
  • Hodnocení autora: *


Redakční blog

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


Pavel Fric

Pavel Fric, 29. listopad

Palapeli


Všechny blogy »