U C++ stringovi se implementiraju na dva načina. Definicijom stringa kao niz karaktera koji završava null karakterom. Null karakter je bajt čiji su svi bitovi nule. Ovaj bajt se označava specijalnim simbolom „“. Ako niz karaktera na kraju ne sadrži null karakter, niz ne predstavlja string.
Pr:
char niz[6]={‘H’,’E’,’L’,’O’,“}
Drugi pristup za inicijalizaciju stringa koristi string konstantu, koja je niz karaktera pod znacima navoda
char niz[]=“Heloo!“
Programer ne smešta null karakter na kraju string konstante, C++ kompajler automatski dodaje “ „, na kraju stringa kada inicijalizuje niz. Prilikom deklaracije se ne navodi broj karaktera koji čine string.
Pr.
Napravi program koji unosi naziv proizvoda i njegovu cenu i prikazuje unos na monitoru računara?
Rešenje.
#include <iostream>
#include <cstring>
using namespace std;
/* run this program using the console pauser or add your own getch, system(„pause“) or input loop */
int main(int argc, char** argv)
{
char text[100];
float cena;
cout<<„Unesi Naziv?“<<endl;
cin>> text;
cout<<“ Unesi cenu?“<<endl;
cin>> cena;
cout<<“ Naziv proizvoda je „<<text<<“ a cena „<< cena<<endl;
return 0;
}
using namespace std;
string s = „Ovo je neki tekst.“;
std::string s = “ Ovo je neki tekst.“;
Unos stringa sa tastature
Za ispisivanje stringa na ekran koristi se cout naredba iz datoteke iostream
Primer koda:
#include<iostream>
#include<string>
int main(){
string ime, prezime;
cin >> ime >> prezime;
cout << ime << ” “ << prezime << endl;
return 0;
}
Unos kompletnog reda teksta sa tastature
getline(cin,text);
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.
Dodela stringa
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
#include <string>
using namespace std;
int main()
{
string puno_ime_i_prezime;
string ime = „Pero“;
string prezime = „Peric“;
puno_ime_i_prezime = ime +” “+ prezime;
cout << puno_ime_i_prezime << endl;
return 0;
}
Nakon izvršavanja programa promenljiva s će sadržati string „Pero Peric“.
Pr2.
Koristeći klasu string spoji dva stringa u jedan?
Rešenje.
#include <iostream>
#include <string>
using
namespace
std;
int
main()
{
string a, b;
a =
"prvi"
;
b =
"drugi"
;
a = a +
" "
+ b;
cout << a << endl;
//stampa 'prva druga'
b = b + b;
cout << b << endl;
//stampa'drugadruga';
return
0;
}
Dužina stringa
string str1;
str1.length()
Primer programa:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string naziv_grada;
int duzina_teksta;
cout << „Unesi naziv grada: „;
getline(cin, naziv_grada);
duzina_teksta = naziv_grada.length() – 1; // Oduzimamo 1 zbog razmaka
cout << endl <<endl;
cout << „Grad: “ << naziv_grada << endl;
cout << „Naziv grada sadrzi “ << duzina_teksta << “ karaktera.“ << endl;
return 0;
}
Poređenje stringova
Npr ‘c’ je ispred ‘d’ po leksikografskom redosledu. Dok je ‘aabc’ ispred ‘abc’ jer se poređenje ne vrši po dužini stringa već po leksikografskom redosledu.
primer 1:
bool b;
b= (“abak” == “abak” ); //true
b= “Ab”<”AA”; //false jer malo ‘b’ je veće po leksikografskom redosledu
// od velikog slova ‘A’.
primer 2: Ispitati tačnost lozinke @n0nimus_@n0nimus.
string lozinka;
cin>> lozinka;
if(lozinka == “@n0nimus_@n0nimus”)
{
cout<< “Tačna je lozinka”<<endl;
}
else{
cout<<”Netačna lozinka”;
}
Funkcije koje omogućavaju rada sa tekstualnim nizovima
- strlen(char[] niz)– vrednost funkcije je dužina niza bez znak null
- strcpy(char[] destinacija, char[] izvor)– kopira tekstualni niz sa izvora do destinacije uključujući i znak null
- strncpy(char[] destinacija, char[] izvor, int N)– kopira najviše N znakova od izvora do destinacije, znak null se kopira samo ako spada u N znakova, inače se uvodi sam. Napomena: niz destinacija mora da bude dovoljno velik da bi primio sve znakove sa izvora
- strcmp(char[] prvi, char[] drugi)– upoređuje niz prvi i niz drugi i kao vrednost daje 0 ako su nizovi jednaki
- strncmp(char[] prvi, char[] drugi, int N)– upoređuje N znakova niza prvi i drugi i ako su isti dodeljuje vrednost 0
- strcat(char[] prvi, char[] drugi)– dodaje nizu prvi niz drugi, niz prvi treba da bude dovoljno velik da prihvati i znakove niza drugi
- strncat(char[] prvi, char[] drugi, int N)– nadovezije prvih N znakova niza drugi nizu prvi
Rešenje.
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
/* run this program using the console pauser or add your own getch, system(„pause“) or input loop */
int main(int argc, char** argv) {
char a[]=“prvi niz“;
char b[]=“drugi niz“;
char c[] = „tekst“;
char d[] = „tekst novi“;
cout << strlen(d) << endl; //stampa 8
cout << strlen(c) << endl; //stampa ‘5’
char t[100];
strcpy(t, „Neka vrednost“); //t=“Neka vrednost“
cout<<t<<endl;
strcpy(t, „Neshto drugo“); //t=“Neshto drugo“
cout<<t<<endl;
strcpy(t, a); //t=“prvi niz“
cout<<t<<endl;
strncpy(t, b, 5); //t=“drugi niz “ (ne kopira “)
cout<<t<<endl;
t[5] = ‘ ‘; //t=“drugi“
strcat(t, b); //t=“drugi niz“
cout << t << endl; //pechati ‘drugi drugi niza’
cout << strcmp(t, a) << endl; //pechati ‘1’
cout << strcmp(c, d) << endl; //pechati ‘0’
return 0; return 0;
}
using namespace std;/* run this program using the console pauser or add your own getch, system(„pause“) or input loop */
int main(int argc, char** argv)
{
string niz[10];
int i,n;
cout<<“ Koliko reci ima vas niz_“;
cin>>n;
for (i=0;i<n;i++)
{
cout<<“ unesi „<<i+1<< “ element niya“<<endl;
cin>> niz[i];
}
for (i=0;i<n;i++)
{
cout<< niz[i]<<“ „;
}
return 0;
}
Pr5.
Unesite ime, prezime, datum rođenja i tekuću godinu; Naravite program koji izračunava godine starosti za osobu čije podatke ste uneli?
Rešenje:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int god, god1, god2;
string ime;
cout<<„Upisi svoje ime:“;
cin>>ime;
cout<<endl<<„Upisi godinu svog rodjenja:“;
cin>>god1;
cout<<endl<<„Koja je godina sada? „;
cin>>god2;
god=god2-god1;
cout<<endl<<ime<<“ ima „<<god<<“ godina.“<<endl;
return 0;
}