Tekstualni podaci
U jeziku C++ postoji tip podataka string koji sadrži tekst. On se koristi kao i svi ostali tipovi, te se neka promenljiva tipa string deklariše na sledeći način.
using namespace std; string s = "Bubble bee string";
std::string s = "Bubble bee string";
Možeš da primetiš da se navodnici koriste za dodelu teksta kao vrednosti stringu u primeru iznad. String ovde predstavlja nisku (niz) pojedinačnih znakova.
Dodela stringa
Možemo da dodelimo vrednost jednog stringa drugom.
string str1 = "Zdravo!"; string str2; str2 = str1;
Jedan string može da se inicijalizuje drugim kao u sledećem primeru.
string str1 = "Zdravo!"; string str2 = str1;
"Spajanje" dva stringa
Dva stringa (ili više njih) se mogu spojiti koristeći operaciju sabiranja "+" kao što smo radili sabirajući brojeve.
#include <iostream> #include <string> using namespace std; int main() { string s = "Bubble"; string p = "bee"; s = s + p; cout << s << endl; return 0; }
Nakon izvršavanja programa promenljiva s će sadržati string "Bubblebee".
Unos stringa sa tastature
Kao i ostali tipovi u jeziku C++, za učitivanje i ispisivanje stringa se koriste cin i cout. Sledi primer unošenja stringa sa tastature.
std::string moj_string; cin >> moj_string;
Operator >> će zaustaviti naš program i sačekati da korisnik nešto otkuca. U sledećem primeru se očekuje da korisnik unese svoje ime.
using namespace std; #include <iostream> #include <string> int main() { string ime; cout << "Unesite svoje ime: "; cin >> ime; cout << "Ahoj, " << ime << "!" << std::endl; return 0; }
Mađutim, ulazni tok cin prestaje da učitava string čim naiđe na razmak, tab (tabulator) ili nov red. Ukoliko želiš da uneseš celu liniju teksta možeš da koristiš funkciju getline.
getline(cin, moj_string);
Prvi argument funkcije getline je cin, koji kaže odakle nam dolazi tekst (u ovom slučaju sa konzole, to jest tastature). Drugi argument je ime string promenljive u koju želiš da smestiš uneti tekst. Funkcija getline čita celu liniju sve dok korisnik ne pritisne [Enter]. Ovo je korisno kada ulazni string sadrži razmake. Sad zamisli da od korisnika tražiš da unese puno ime i prezime u jednoj liniji. Pošto ćemo tako imati razmak u tekstu, koristićemo getline.
using namespace std; #include <iostream> #include <string> int main() { string puno_ime; cout << "Unesite svoje puno ime i prezime: "; getline(cin, puno_ime); cout << "Ahoj " << puno_ime << "!" << std::endl; return 0; }
Evo nekoliko primera ulaznog teksta kao i rezultata koje bi dali dali cin i getline:
-
ulaz je jedan red "ana bane": cin će da učita "ana", a getline "ana bane"
-
ulaz su dve reda, gde je sadržaj prvog "ana bane", a drugog "cane dejan": cin će da učita "ana", a getline "ana bane"
-
ulaz je jedan red u kojem je jedna reč "ana": i cin i getline će da učitaju isto "ana"
Dužina stringa
Slova, razmaci, znaci interpunkcije i svi ostali znaci koji se koriste u računaru nazivaju se karakteri. Da bismo dobili broj karaktera u nekom stringu koristimo funkciju length.
str1.length()
Zapis str1.length() se koristi kao (brojni) izraz, čija je vrednost upravo broj karaktera stringa str1, odnosno njegova dužina. Sledi još jedan primer kratkog programa u kome ilustrujemo dodelu, spajanje i dužinu stringa.
#include <iostream> #include <string> using namespace std; int main() { string ime; string prezime; string puno_ime; int duzina_imena; cout << "Unesi svoje ime: "; getline(cin, ime); cout << endl; cout << "Unesi svoje prezime: "; getline(cin, prezime); puno_ime = ime + " " + prezime; duzina_imena = puno_ime.length() - 1; // Oduzimamo 1 zbog razmaka cout << endl <<endl; cout << "Zdravo, " << puno_ime << endl; cout << "Tvoje puno ime sadrzi " << duzina_imena << " karaktera." << endl; return 0; }
Primer ispisa ovog programa:
Unesi svoje ime: Ibro Unesi svoje prezime: Dirka Zdravo, Ibro Dirka Tvoje puno ime sadrzi 9 karaktera.
Poređenje stringova
Sledeći programski kod određuje da li je ulazni string jednak unapred zadatom stringu (stringu naše lozinke).
using namespace std; #include <iostream> #include <string> int main() { string lozinka; getline(cin, lozinka); if(lozinka == "3astoL1$am0dabrao0vol1koDugackuLoz1nku") { cout<<"Tacna lozinka!"; } else { cout<<"Netacna lozinka!"; } return 0; }
Dakle, operatori poređenja >, <, ==, >=, <=, != se mogu primeniti i na stringove tako da možemo formirati izraze koji vraćaju vrednost true/false. Operatori <, >,<= i >=, upoređuju stringove leksikografski, tj. po abecedi, a ne po dužini stringa. Tako bi npr. string "akrobacije" bio manji od stringa "burek", iako je duži od drugog stringa, zato što se pre njega pojavljuje u rečniku.
Toliko za sad o stringovima, biće dalje o njima reči u nastavku priručnika.