O constantă de tip șir de caractere se declară între două caractere ” . În memoria internă, o constantă de acest tip este reținută sub forma unui vector de caractere. Fiecare componentă a șirului (începând cu cea de indice 0) reține codul ASCII al caracterului pe care îl memorează. Convenția este ca ultimul octet sa retină 0 (codul caracterului nul). Caracterul nul este memorat automat. Trebuie rezervate lungimea_șirului+1 caractere char (+1 pentru caracterul nul).
Limbajul C/C++ permite inițializarea unui tablou de caractere printr-o constantă șir, care include automat caracterul null.
Exemplu :
char vect[11]=”calculator”;
char vect[]=”calculator”; (compilatorul face calculul numarului de octeții necesari)
char vect[100]=”calculator”; (s-au rezervat mai multi octeți decât era necesar)
Șirurile de caractere sunt de fapt tablouri de caractere, care au ca ultim element un terminator de șir, 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
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 / AFIȘAREA ȘIRURILOR 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
- 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>1>c;
cout<<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 nul este inserat automat iar caracterul transmis ca ultim parametru nu este inserat in sir.
Exemplu:
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”
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).
Functia cin.get(char c) are rolul de a citi un caracter (alb sau nu) pe care il incarca in variabila c.
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.
- declarate in stdio.h
- char * gets(char * s); citeste caracterele din intrare pâna la intalnirea caracterului Enter, care nu se adauga la sirul s; plaseaza '\0' la sfarsitul lui s; returneaza adresa primului caracter din sir; daca se tasteaza CTRL/Z returneaza NULL; codul lui Enter e scos din buffer-ul de intrare
- int puts(char * s); tipareste sirul s, trece apoi la rand nou
- scanf("%s",s); citeste caracterele din intrare pina la intalnirea primului blanc sau Enter, care nu se adauga la sirul s; plaseaza '\0' la sfarsitul lui s; daca se tasteaza CTRL/Z returneaza EOF; codul lui blanc sau Enter raman in buffer-ul de intrare
- printf("%s",s); tipareste sirul s
- declarate in string.h
- int strcmp(char *s1,char *s2); returneaza <0, daca s1 < s2
- int strncmp(char *s1,char *s2,int n); comparare a doua siruri pe lungimea n
- char* strcpy(char *d,char *s); copiaza sirul sursa s in sirul destinatie d; returneaza adresa sirului destinatie
- char* strncpy(char *d,char *s,int n);
- int strlen(char *s);
- char* strcat(char *d,char *s);
- char* strchr(char s,char c);
- char* strstr(char *s,char *ss);
- 0, daca s1 = s2
>0, daca s1 > s2
Tudose Lorena
Niciun comentariu:
Trimiteți un comentariu