$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

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.