ȘIRURI DE CARACTERE
Un tablou de caractere reprezintă o
succesiune de caractere - orice caractere de pe tastatură (literă mare, literă mică, cifre, operatori aritmetici, caractere speciale).
Un șir de caractere este un tablou de
caractere care are la sfârșit caracterul NULL ('\0').
'\n' - caracterul linie noua deci cout<<endl; echivalent cu cout<<'\n';
Un șir de caractere se reprezintă între ghilimele ("șir") iar
un caracter între apostrofuri {'a').
Declararea unui șir de caractere:
char
vect[20];
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.
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:
AFISAREA SIRURILOR
DE C
A
RACTERE
cout<<vect; // În cazul în
care are terminatorul de sir la final.
for(int i=0;i<=9;i++)
cout <<vect[i]; // calculator
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.