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

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. 


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

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

Vysvětleme si internet

TELE3Možná jste až do této chvíle vůbec netušili, že existuje něco jako DNS servery. A to navzdory tomu, že se s těmito při používání internetu dnes a denně setkáváte a nemůže tomu být ani jinak. Protože nebýt těchto, nebyl by internet internetem.

Pokračování ...


Redakční blog

Pavel Fric

Pavel Fric, 21. August

Sayonara Player 1.5.1

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


Pavel Fric

Pavel Fric, 26. January

MuseScore 3

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


Redakce

Redakce, 21. December

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 »

SOLIDWORKS