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.