You are on page 1of 3

Uvod u programiranje Gimnazija Biha

Stringovi
U C programskom jeziku ne postoji tip string, nego se koristi niz znakova(niz iji je osnovni tip char).
Kod takvih C stringova moramo voditi rauna oko puno detalja, npr. ako elimo stringu dodati neke
znakove moramo voditi rauna ima li dosta mjesta u nizu za te znakove. U C++ se takoer moe raditi sa
C stringovima jer je programski jezik C podskup jezika C++, ali da bi se programerima olakao ivot,
u C++ je uveden tip string koji se ponaa dosta predvidivo.
Ova klasa je smjetena u biblioteku <string> a sve definicije su smjetene u namespace std. Za na
kompajler pri radu sa stringovima direktiva #include <string> nije potrebna, ali je ukljuite zbog
portabilnosti vaeg koda. Evo kako izgleda rad sa stringovima:
Kao to smo vidjeli i ranije, string se stavlja u dvostruke znake
string s1, s2, s3; navoda. Ukoliko elimo dva stringa spojiti u trei, onda moemo
s1=''auto'';
koristiti operator +. Operatori =, kao i obino za dodjelu vrijednosti.
s2=''parking'';
s3=s1+s2; Dakle stvari se ponaaju kako i pretpostavljamo, s tim da treba
cout<<"Ja trebam "+s3; napomenuti da je ''auto'' ovdje C string i da se on ovdje automatski
pretvara u tip string kada se sprema u s1.
Kod zadnje izjave mijeaju se C i C++ stringovi pa kompajler mora raditi dosta da ovdje sve stvari
funkcioniu kako treba.
Kada elimo unositi string sa tastature onda treba voditi rauna da cin ignorira blanko znakove, npr.
string s1,s2; Ovdje ako korisnik unese reenicu:''Ja idem u etnju.'', s1 e imati
cin>>s1; vrijednost ''Ja'' a s2 ''idem''.
cin>>s2;

string linijaTeksta; Ako elite unijeti cijelu reenicu u jedan string, onda morate
getline(cin,linijaTeksta); koristiti funkciju getline.
Dakle ovakav nain uitava sve do pojave znaka '\n', tj. pritiska tipke enter. Postoje i druge verzije
funkcije getline, recimo ako elimo stati sa uitavanjem linije kada neko unese znak ?, onda bi ili sa:
getline(cin,linijaTeksta, '?'); // ne uitava znak ?

Upozorenje: Treba paziti prilikom mijeanja funkcija cin i getline da ne dobijete neeljene rezultate:
int n; Ako korisnik unese:
string linija; 42
cin>>n; Zdravo svima!
getline(cin,linija); oekujemo da vrijednost varijable n bude 42 a stringa linija ''Zdravo
svima!''.
Ipak nije tako jer cin kod unosa broja odbacuje sve nevidljive znakove pa tako i enter nakon unosa broja,
to eka narednu liniju getline za uitavanje, a ta komanda e odmah stati sa uitavanjem na znaku enter,
pa e string linija biti prazan!!! Da bi se ovaj problem rijeio moete koristiti cin.ignore(100, '\n');, to je
poziv ignore funkciji koja e itati i odbacivati cijeli ostatak linije(odbaen od cin iz prethodne linije)
zakljuno sa i ukljuujui i znak '\n'(ili ako ne nae '\n', onda dok ne odbaci 100 znakova).
Meutim, jednostavniji nain je upotrijebiti objekat nazvan guta praznina (engl. whitespace eater ili
whitespace extractor), koji je u jeziku C++ imenovan prosto imenom ws. Radi se o specijalnom objektu
za rad sa tokovima (poput objekta endl), koji je takoer neka vrsta manipulatora. Ovaj objekat,
upotrijebljen kao drugi argument operatora izdvajanja >>, uklanja sve praznine koje se eventualno
nalaze na poetku ulaznog toka, ostavljajui sve druge znakove u ulaznom toku netaknute.
Jednostavno uradite ovo:
cin>>n>>ws;
Uvod u programiranje Gimnazija Biha
Ukoliko elite i na ove C++ stringove gledati kao na niz znakova, onda i to moemo, to se vidi iz:

Ovdje se uz pomo
funkcije length, odreuje
duzina=linijaTeksta.length(); duina stringa, koji se duzina=linijaTeksta.length();
for (int i=duzina-1;i>=0;i--) onda tampa od zadnjeg for (int i=duzina-1;i>=0;i--)
cout<<linijaTeksta[i]; do prvog znaka, tj. cout<<linijaTeksta.at(i));
obrnuto. To se moe
raditi i sa at()

Dakle oba ova naina za pristup pojedinim znakovima stringa su dozvoljena.


Operatori == i = rade na predvidiv nain i sa stringovima. Operatori <, >,<= i >=, uporeuju stringove
leksikografski, tj. po abecedi, a ne po duini stringa. Tako bi npr. string asmir bio manji od stringa
babo, iako je dui od drugog stringa. Evo nekih funkcija sa stringovima:
str.substr(pos, length) vraa podstring stringa str od mjesta pos i duine length

str.empty() vraa tano ako string str prazan


str.insert(pos,str1) umee string str1 u string str poevi od pozicije pos u stringu str
str.erase(pos, length) uklanja iz stringa str podstring duine length, poevi od mjesta pos
pronalazi poziciju prvog pojavljivanje stringa str1 unutar str. Ako ne nae
str.find(str1) vraa broj -1.

pronalazi poziciju prvog pojavljivanje stringa str1 unutar str poevi od


str.find(str1, pos)
pozicije pos.
str.c_str() vraa c string sa istim znakovima kao i str

Napii program koji okree rije naopako! Napii program koji provjerava da li je rije palindrom
#include <iostream> #include <iostream>
//#include <string> #include <string>
using namespace std; using namespace std;

int main () int main ()


{ {
string moj_string; string ulaz, zalu;
int duzina; int duzina;
getline(cin, ulaz);
getline(cin, moj_string); duzina=ulaz.length();
duzina=moj_string.length(); zalu="";
for(int i=duzina-1;i>=0;i--)
for(int i=duzina-1;i>=0;i--) zalu=zalu+ulaz[i];
cout<<moj_string[i]; if (ulaz==zalu)
cout<<"Unesena rijec je palindrom";
system("Pause"); else
return 0; cout<<"Unesena rijec nije palindrom";
} system("Pause");
return 0;
}
Uvod u programiranje Gimnazija Biha
1) Napiite program koji od korisnika trai dvije rijei,a zatim provjerava da li je druga rije dio prve.
Primjer1 Primjer2
Unesi prvu rijec:buna Unesi prvu rijec:bosna
Unesi drugu rijec:una Unesi drugu rijec:posna
Druga rijec je dio prve. Druga rijec nije dio prve.

2) Napiite program koji provjerava da li je druga rije prefiks ili sufiks prve rijei.
Primjer1 Primjer2 Primjer3
Unesi prvu rijec:bunar Unesi prvu rijec:bunar Unesi prvu rijec:bunar
Unesi drugu rijec:nar Unesi drugu rijec:buna Unesi drugu rijec:una
Jeste prefiks/sufiks. Jeste prefiks/sufiks. Nije prefiks/sufiks.

You might also like