ȘIRURI DE CARACTERE
Limbajul
C/C++
permite initializarea unui tablou de caractere printr-o constanta sir,
care
include automat
caracterul
NULL
Caracterul NULL '\0' se adauga atutomat
dupa ultimul caracter
din sir.
'\n' - caracterul linie noua deci cout<<endl; echivalent cu cout<<'\n';
Exemplu :
char vect[11]=”calculator”;
char vect[]=”calculator”; (compilatorul face calculul
numarului de
octeti necesari)
char vect[100]=”calculator”; (s-au rezervat mai
multi octeti
decat era necesar)
1
Sirurile de caractere sunt de fapt tablouri de caractere, care au ca ultim element un terminator de sir, caracterul NULL. Exemplu:
char tc[5] = {’a’, ’b’,
’c’, ’d’, ’e’}; //
tablou de caractere
char sc[5] = {’a’, ’b’,
’c’, ’d’, ’\0’}; //
sir de caractere cu elementele abcd
Ultima initializare este echivalenta cu:
char sc[5] =
”abcd”; //sau char sc[] =
”abcd”; char sc1[5]
= ”abcd”;
char s[10];
cout<<sc<<endln; //afiseaza abcd
cout<<tc<<endl; //eroare:
tabloul
de caractere nu
contine terminatorul de sir, deci
nu poate fi afisat
ca sir
cout<<s<<endl;
//
eroare: tablou neinitializat
cout<<sc1[0]; // afiseaza primul caracter din sirul sc1
cout<<sc1[2]; /
/ afiseaza al treilea element din sirul sc1
sc1[1]=’K’; // elementului din sir de indice 1 i
se atribuie valoarea
„K‟;
CITIREA / AFISAREA SIRURILOR DE
CARACTERE
Sirurile
de caractere
pot
fi initializate inca de
la
declarare sau citite pe
parcursul programului.
a.
Citirea
unui
sir de caractere se
poate
face ca citirea oricarui tablou,
intr-un for,
caracter cu
caracter
(desi nu este
recomandata). In acest
caz, terminatorul
de sir
nu este memorat automat,
el trebuie pus
explicit dupa ultimul caracter din sir.
Exemplu:
char c[20];
for(int i=0;i<=5;i++)
cin>>c[i];
cout<<c<<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
c[6]='\0';
cout<<c<<endl; //a fost pus terminatorul
de sir, deci sirul va fi afisat corect
b. Se poate face pur si
simplu, 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 ex,
daca se citeste
“ora de informatica”,
variabila c va retine numai “ora”).
Exemplu char c[30]; cin>>c;
cout<<c;
c.
Se poate
folosi o functie speciala pentru citirea
sirurilor de caractere,
inclusa in biblioteca string.h (varianta recomandata).
Exemplu
char a[30],x;int nr; cin.get(a, nr, x
);
Functia cin.get
citeste un sir de caractere sau pana cand au
fost citite
nr-1 caractere, sau
daca s-a
intalnit
caracterul x. Al
treilea
parametru poate lipsi,
caz in care el este
implicit caracterul ‟\n‟ (new line). Sunt citite si caracterele albe, caracterul NULL este inserat automat iar
caracterul
transmis ca ultim parametru nu este inserat in sir.
E
xemplu
char a[30];
cin.get(a,5,’s’); //daca se citeste
sirul “maimuta,
variabila a
va retine
“maim”
cin.get(a,15,’s’); //daca se citeste
sirul “maimuta,
variabila a
va retine
“maimuta”
cin.get(a,15,’t’); //daca se citeste
sirul “maimuta,
variabila a va
retine “maimu”
2
cin.get(a,4,’t’); //daca se
citeste sirul “maimuta, variabila
a va
retine “mai”
cin.get(a,10); //daca se citeste
sirul “maimuta,
variabila a
va retine
“maimuta”
Functia cin.get( ) fara parametri are rolul de a citi un caracter
(alb sau nu).
Observatie
: In cazul utilizarii repetate a functiei
cin.get(a,nr,x), 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 a[30],b[30];
cin.get(a,15);
cin.get(b,10);
Daca se
incearca citirea
sirurilor „sarbatoare” si
„vacanta”,
se observa ca
a=”sarbatoare”, b=””
(nici nu apucam sa citim sirul b). Varianta corecta
este:
cin.get(a,15);
cin.get();
cin.get(b,10);
Afisarea unui sir de
caractere
se face folosind
cout.
cout<<a;
Se poate afisa
si caracter cu caracter, ca in
cazul tablourilor, dar aceasta varianta nu este
recomandata.