Do sada smo naučili kako C++ radi sa:

  • brojevima (int, float, double)
  • karakterima (char)
  • logičkim vrednostima (bool)

Ali većina realnih programa ne radi samo sa brojevima.

Vrlo često program mora da obrađuje tekst.

Na primer:

  • ime korisnika
  • prezime
  • email adresu
  • naziv proizvoda
  • grad
  • lozinku
  • poruku
  • naslov dokumenta
  • pretragu
  • unos rečenice

Za takve situacije koristimo tip:

string

Rad sa tekstom je jedna od najvažnijih oblasti programiranja, jer gotovo svaka aplikacija koristi tekstualne podatke.

U ovoj lekciji naučićemo:

  • šta je string,
  • kako se pravi string promenljiva,
  • kako se unosi tekst,
  • razliku između char i string,
  • rad sa getline,
  • osnovne operacije nad stringovima,
  • i najčešće greške početnika.

Šta je string?

String predstavlja niz karaktera.

Drugim rečima:

tekst sastavljen od više znakova.

Primer:

string ime = "Marko";

Ovde:

M
a
r
k
o

su pojedinačni karakteri.

Zajedno čine jedan string.

Možemo zamisliti string kao niz char vrednosti koje zajedno predstavljaju tekst.

Zašto string nije char?

Ovo je veoma važna razlika.

char čuva:

jedan znak

Primer:

char slovo = 'A';

string čuva:

više znakova

Primer:

string ime = "Marko";

Razlika:

'A'

= jedan karakter

"Marko"

= tekst

Primer:

Pogrešno:

char ime = 'Marko';

Ispravno:

string ime = "Marko";

Uključivanje string biblioteke

Za rad sa stringovima koristimo biblioteku:

#include <string>

Kompletan primer:

#include <iostream>
#include <string>
using namespace std;

Neki kompajleri dozvoljavaju rad sa stringovima i bez eksplicitnog uključivanja ove biblioteke, ali dobra praksa je da je uvek uključimo.

Deklaracija string promenljive

Primer:

string ime;

Ovde smo napravili string promenljivu.

Dodela vrednosti:

string grad = "Beograd";

Još primera:

string prezime = "Petrovic";
string email = "student@fakultet.rs";
string predmet = "Programiranje";

Ispis string vrednosti

Koristi se cout.

Primer:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string ime = "Marko";

    cout << ime;

    return 0;
}

Rezultat:

Marko

Unos string vrednosti pomoću cin

Primer:

string ime;

cin >> ime;

Ako korisnik unese:

Marko

radi normalno.

Ako unesemo:

Marko
Petar

uzima samo prvu reč.

Zašto?

Jer:

cin

prekida unos na prvom razmaku.

Problem sa cin kod stringova

Primer:

string punoIme;

cin >> punoIme;

Ako korisnik unese:

Marko Petrovic

rezultat:

Marko

Petrovic ostaje nepročitan.

To je veoma česta početnička greška.

getline()

Za unos cele linije teksta koristi se:

getline()

Primer:

string punoIme;

getline(cin, punoIme);

Ako korisnik unese:

Marko Petrovic

rezultat:

Marko Petrovic

Sada se čuva ceo unos.

Primer sa getline

#include <iostream>
#include <string>
using namespace std;

int main() {
    string imePrezime;

    cout << "Unesi ime i prezime: ";
    getline(cin, imePrezime);

    cout << "Uneli ste: " << imePrezime;

    return 0;
}

Problem kada kombinujemo cin i getline

Ovo je klasična zamka.

Primer:

int godine;
string ime;

cin >> godine;
getline(cin, ime);

Problem:

getline() odmah preskače unos.

Zašto?

Jer nakon:

cin >> godine;

ostaje znak ENTER u ulaznom baferu.

Rešenje:

cin.ignore();

Ispravno:

cin >> godine;
cin.ignore();
getline(cin, ime);

Spajanje stringova

Stringove možemo spajati pomoću:

+

Primer:

string ime = "Marko";
string prezime = "Petrovic";

string punoIme = ime + " " + prezime;

Rezultat:

Marko Petrovic

Dužina stringa

Možemo dobiti broj karaktera.

Koristi se:

.length()

Primer:

string tekst = "Programiranje";

cout << tekst.length();

Rezultat:

13

Pristup pojedinačnim karakterima

String je niz karaktera.

Možemo pristupiti svakom znaku.

Primer:

string ime = "Marko";

cout << ime[0];

Rezultat:

M

Primer:

cout << ime[1];

Rezultat:

a

Menjanje karaktera

Možemo menjati pojedinačne znakove.

Primer:

string ime = "Marko";

ime[0] = 'D';

cout << ime;

Rezultat:

Darko

Poređenje stringova

Možemo porediti tekst.

Primer:

string lozinka = "12345";

if (lozinka == "12345") {
    cout << "Tacno";
}

Poređenje radi direktno.

Prazan string

Možemo imati prazan string.

Primer:

string tekst = "";

To znači:

string postoji, ali nema sadržaj.

Provera praznog stringa

Primer:

if (tekst.empty()) {
    cout << "String je prazan";
}

Realni primer

Login forma:

string korisnickoIme;
string lozinka;

Prodavnica:

string nazivProizvoda;

Forma:

string adresa;

Email:

string email;

Komentar:

string poruka;

String je jedan od najčešće korišćenih tipova podataka.

Najčešće greške početnika

1. Mešanje char i string

Pogrešno:

char ime = 'Marko';

2. Korišćenje cin za više reči

Pogrešno očekivanje:

cin >> punoIme;

da pročita celu rečenicu.

3. Zaboravljen cin.ignore()

Kod kombinacije:

cin

i:

getline

4. Pogrešni navodnici

String koristi:

dvostruke navodnike

"tekst"

Ne:

'tekst'

5. Izlazak van opsega

Pogrešno:

string ime = "Ana";

cout << ime[20];

Greška.

Praktičan primer programa

#include <iostream>
#include <string>
using namespace std;

int main() {
    string ime;
    string prezime;

    cout << "Unesi ime: ";
    getline(cin, ime);

    cout << "Unesi prezime: ";
    getline(cin, prezime);

    string punoIme = ime + " " + prezime;

    cout << "Student: " << punoIme;

    return 0;
}

Zašto je string toliko važan?

Bez stringova nema:

  • formi
  • registracije
  • login sistema
  • email validacije
  • chat aplikacija
  • CMS sistema
  • pretrage
  • unosa podataka
  • realnih aplikacija

Ovo je jedna od ključnih oblasti.

Rezime

U ovoj lekciji naučili smo:

string

predstavlja tekstualni podatak

Važne operacije:

  • unos
  • ispis
  • getline
  • spajanje
  • dužina
  • pristup karakterima
  • poređenje

String je jedna od najvažnijih osnova modernog programiranja.

Mini test

  1. Šta je string?
    a) jedan karakter
    b) niz karaktera
    c) broj
  2. Koji unos čita celu liniju?
    a) cin
    b) getline
  3. Kako spajamo stringove?
    a) –
    b) +
  4. Kako dobijamo dužinu?
    a) .length()
    b) .sizeof()
  5. Šta je problem sa cin kod stringa?
    a) čita samo do razmaka
    b) ne radi uopšte

Zadaci za vežbu

  1. Napravi string promenljivu za ime.
  2. Unesi puno ime pomoću getline.
  3. Spoji ime i prezime.
  4. Ispiši prvo slovo stringa.
  5. Prikaži dužinu unetog teksta.

Domaći zadatak

Napravi mini formular koji traži:

  • ime
  • prezime
  • grad
  • email
  • omiljeni predmet

Zatim ispisuje lepo formatiran profil studenta.

Pristupačnost