
4. Citirea şi afişarea şirurilor de caractere
Modalitatea de memorare a şirurilor, prezentată mai sus (memorând lasfârşitul şirului codul ASCII al caracterului nul), ne permite citirea şi afişarea cu mare uşurinţă a şirurilor de caractere. De asemenea Limbaul C deţine numeroase funcţii pentru prelucrarea şirurilor de caractere.
Funcţiile cin şi cout suportă şirurile de caractere terminate cu caracterul nul, astfel pot fi citite respectiv afişate şirurile de caractere. Exemplul de mai sus poate fi scris mult mai simplu astfel:
//CUVANT 1
#include <iostream.h>
#include <conio.h>
void main()
{char cuvant[15];
//citeste un sir de caractere
cout<<"introduceti cuvantul:"; cin>>cuvant;
//afiseaza sirul de caractere de la primul octet pana la întalnirea caracterului nul
cout<<"cuvantul citit:"; cout<<cuvant;
getch();
}
În urma introducerii cuvântului "programator", în memorie vom avea următoarea reprezentare:
cuvant

Un vector care conţine un şir de caractere citit sau iniţializat în modul anterior
prezentat, poate fi adresat pe componente, în mod normal. De exemplu cuvant[0]='p', cunvant[1]='r', ş.a.m.d.
Din nefericire cu ajutorul funcţiei cin nu putem citi şiruri de cractere care conţin spaţii sau alte caractere albe.
Funcţia cin procedează astfel la citirea unui şir de caractere:
Se sar toate caracterele albe
Se citeste şirul care începe cu primul caracter care nu este alb
Citirea se încheie la întâlnirea primului caracter alb.
Exemplu:
Pentru şirul introdus de la tastatură: " invatam despre siruri de caractere", programul de mai sus va afişa doar "invatam".
Pentru citirea şirurilor de caractere care conţin cuvinte separate prin spaţii sau alte caractere albe vom folosi funcţia cin.get().
Formatul funcţiei: cin.get(nume_sir, int nr, char='\n') unde:
nume_sir - reprezintă identificatorul şirului de caractere
nr - reprezintă numărul de caractere care se vor citi împreună cu caracterul terminal nul.
Al treilea parametru desemnează caracterul la întâlnirea căruia se opreşte citirea şirului (valoarea lui implicită este '\n'), prin urmare în cazul în care nu dorim ca citirea sa se termine cu un alt cracter diferit de '\n', acest parametru poate să lipsească.
Funcţia cin.get citeşte caractere pâna când este îndeplinită una din conditiile: fie s-au citit nr-1 caractere fie a întâlnit caracterul specificat de parametrul al treilea.
Exemplu:
//SIR
#include <iostream.h>
#include <conio.h>
void main()
{char sir[50];
cout<<"introduceti cuvantul:";
cin.get(sir,40); //citeste maximum 40 de caractere sau se termina la <enter>
cout<<"cuvantul citit:";
cout<<sir;
getch();
}
În C pot exista mai multe funcţii cu acelaşi nume dar care diferă între ele prin numărul parametrilor, cu acţiuni diferite. (această modalitate de utilizare a funcţiilor poartă numele de supraîncarcarea funcţiilor)
Există încă o implementare a funcţiei cin.get() fară parametri. În acest caz funcţia citeşte un singur caracter alb sau nu.
Observaţie:
În cazul citirii a două şiruri de caractere, în buffer-ul de citire se depune după citirea primului şir, caracterul '\n', datorită faptului că s-a tastat <enter>. Citirea celui de-al doilea şir se opreşte pentru că se preia '\n'.din buffer.
Apelând funcţia cin.get() aceasta va prelua caracterul '\n', eliminăm acest inconvenient, iar al doilea şir se va citi în mod normal.
//SIR
#include <iostream.h>
#include <conio.h>
void main()
{char sir1[50],sir2[50];
cout<<"introduceti sir1:";
cin.get(sir1,40);
cout<<"cuvantul citit:";
cout<<sir1<<endl;
cin.get(); //citeste caracterul '\n' de la sfarsitul sirului sir1
cout<<"introduceti sir2:";
cin.get(sir2,40);
cout<<"cuvantul citit:";
cout<<sir2;
getch();
}