$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \newcommand{\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{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Stringovi 1

  • Dozvoljeno polaganje
  • Lekcije
  • Nema
  • Teo
  • 7/25/2015

U C++-u 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";

 

Ili samo

 

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

Takoše, možemo da dodelimo vrednost jednog stringa drugom:

string str1 = "Zdravo!";

string str2;

str2 = str1;

Možeš i da inicijalizuješ jedan string drugim kao u 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 C++-u, za učitivanje i ispisivanje stringa se koriste cin i cout, evo primera 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. Evo jednog primera unosa:

using namespace std;

#include <iostream>

#include <string>

 

int main(){

    string ime;

    cout << "Unesite svoje ime: ";

    cin >> ime;

    cout << "Ahoj, " << ime << "!" << std::endl;

 

    return 0;

}

 

Funkcija cin međutim 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. 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, moj_string);

cout << "Ahoj " << puno_ime << "!" << std::endl;

 

    return 0;

}

 

Evo za nekoliko primera ulaznog teksta koje bi rezultate uporedo dali cin i getline:

 

"ana bane"

cin: "ana"

getline: "ana bane"

 

"ana bane

cane dejan"

cin: "ana"

getline: "ana bane"

 

"ana"

cin: "ana"

getline: "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, pišemo:

str1.length()

Zapis str1.length() se koristi kao (brojni) izraz, čija je vrednost upravo broj karaktera stringa str1, odnosno njegova dužina.

 

Evo jednog primera 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 kursa.