Citirea sirurilor de caractere
Sirurile de caractere pot fi initializate inca de la declarare sau citite pe parcursul programului.
1. Citirea unui sir de caractere se poate face ca citirea oricarui tablou, intr-un for, caracter cu caracter. Aceasta varianta nu este recomandata. In acest caz, terminatorul de sir '\0' nu este memorat automat, el trebuie pus explicit dupa ultimul caracter din sir.
Exemplu:
char sir[20];
for(int i=0;i<=5;i++)
cin>>sir[i];
cout<<sir<<endl; /*se va afisa sirul format din cele 6 caractere, urmat de caractere „reziduale”,
initializate implicit la compilare, din cauza ca n-a fost pus terminatorul de sir*/
sir[6]=0; //introducem terminatorul de sir
cout<<sir<<endl; //sirul va fi afisat corect
2. Se poate face folosind cin>>. Caracterul nul este adaugat automat.
Dezavantajul este ca in acest fel nu se pot citi siruri care contin mai multe cuvinte separate prin spatii.
Citirea sirului se sfarseste la intalnirea primului caracter blank.
De exemplu, daca se sirul este “clasa a XI-a”, variabila sir va retine numai “clasa”.
Exemplu:
char sir[30];
cin>>sir;
cout<<sir;
3. Se poate folosi o functie speciala pentru citirea sirurilor de caractere, inclusa in biblioteca string.h.
char sir[20],c_end;int nrcaractere;
cin.get(sir,nrcaractere,c_end);
Functia cin.get citeste un sir de caractere pana cand au fost citite nrcaractere-1 caractere sau pana s-a intalnit caracterul c_end.
Parametrul c_end poate lipsi. Implicit acesta este ’\n’ (new line).
Pot fi citite si caracterele albe, caracterul nul este inserat automat iar caracterul transmis ca ultim parametru nu este inserat in sir.
Exemple:
char sir[30]="informatica";
cin.get(sir,5,’?’); //variabila sir va retine “info”
cin.get(sir,15,’*’); //variabila sir va retine “informatica”
cin.get(sir,15,’o’); //variabila sir va retine “inf” deoarece s-a intalnit caracterul 'o' pe a patra pozitie in sir
cin.get(sir,4,’c’); //variabila a va retine “inf”
cin.get(sir,15); //variabila a va retine “informatica”
Functia cin.get( ) fara parametri are rolul de a citi un caracter.
Functia cin.get(char c) are rolul de a citi un caracter pe care il atribuie in variabilei c.
In cazul utilizarii repetate a functiei cin.get(sir,nr,c), dupa fiecare folosire trebuie citit caracterul de la sfarsitul fiecarui sir, adica ’\n’. In caz contrar, acest caracter va fi incarcat la inceputul urmatorului sir, a carui citire se termina la caracterul Enter, deci citirea celui de-al doilea sir se termina inainte de a incepe, iar al doilea sir va fi sirul vid.
Aceasta citire a caracterului ’\n’ se realizeaza folosind cin.get() fara parametri.
Exemplu:
char sir1[20],sir2[30];
cin.get(sir1,15);
cin.get(sir2,10);
Daca se citeste pentru sir1='Colegiul" si pentru sir2="Titeica" se observa ca sir1=”Colegiul" dar sir2=”” (sirul vid)
Varianta corecta este:
cin.get(sir1,15);
cin.get();
cin.get(sir2,10);
Afisarea unui sir de caractere se face folosind cout.
cout<<sir;
Se poate afisa si caracter cu caracter, folosind o instructiune repetitiva, ca in cazul tablourilor, dar aceasta varianta nu este recomandata.