Documente Academic
Documente Profesional
Documente Cultură
VECTORI DE CARACTERE
Sirurile de caractere sunt de fapt
tablouri de caractere, care au ca
ultim element un terminator de sir,
caracterul null.
Exemplu:
char sc[5] = {a, b, c, d, \
0}; // sir de caractere cu
elementele abcd sau tablou de
caractere)
In memoria interna, o constanta
de acest tip este retinuta sub forma
unui vector de caractere.
Fiecare componenta a sirului
(incepand cu cea de indice 0) retine
codul ASCII al caracterului pe care
il memoreaza.
Conventia este ca ultimul octet sa
retina 0 (codul caracterului nul).
Caracterul nul este memorat
automat. Trebuie rezervate
lungimea_sirului+1 caractere char
(+1 pentru caracterul nul).
Limbajul C/C++ permite
initializarea unui tablou de caractere
printr-o constanta sir, care include
automat caracterul NULL sau \0
Exemplu :
char vect[11]=calculator; (O
constanta de tip sir de caractere de
declara intre doua caractere )
char vect[]=calculator;
(compilatorul face calculul
numarului de octeti necesari)
char vect[100]=calculator; (s-au
rezervat mai multi octeti decat era
necesar)
Exemple de declaratii:
char tablouc*12+ = ,c, l, a, s,
a,' ','a',' ','X','I','-','A'}; // tablou
de caractere
char sirc*13+ = ,c, l, a, s, a,'
','a',' ','X','I','-','A','\0'}; // sirul de
caractere : clasa a XI-a
char sc*5+ = clasa a XI-a;
//echivalent cu sirul sc
char sc [ + = clasa a XI-a;
//echivalent cu sirul sc
char sc *5+ = clasa a XI-a;
char sir[50];
Afisari si atribuiri:
cout<<sirc<<"\n"; //afiseaza clasa
a XI-a
cout<<tablouc<<"\n"; //eroare:
tabloul de caractere poate fi afisat ca
sir
cout<<s<<endln; // eroare:
tablou neinitializat
cout<<sc [0];
// afiseaza primul
caracter din sirul sc c
cout<<sc [4];
// afiseaza al
patrulea caracter din sirul sc
a
sc *0+=p;
// elementului din sir
de indice 0 i se atribuie valoarea
p;
cout<<sc<<endln; // se afiseaza :
plasa a XI-a
sc [4]='C';
cout<<sc<<endln; // se afiseaza
plaCa a XI-a
Citirea si afisarea
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
cin.get() pentru citirea sirurilor de
caractere, inclusa in biblioteca
string.h.
char sir[20], c_end;
int nrcaractere;
int main() {
int a;
char s1[100],s2[100];
cout<<"tasteaza o fraza: ";
cin.get(s1,100); cin.get();
cout<<"tasteaza o fraza: ";
cin.get(s2,100); cin.get();
a=strcspn(s1 ,s2); //returneaza
numarul caracterelor din s1 si nu
sunt in s2 cout<<a;
return 0; }
11. Functia spn ( )
Forma general: strspn(s1 ,s2)
Functia returneaz numrul
caracterelor din sirul s1 care se
gsesc n sirul s2
#include <iostream>
#include<string.h> #include
<stdio.h> using namespace std;
int main()
{
int a;
char s1[100],s2[100];
cout<<"tasteaza o fraza: ";
cin.get(s1,100); cin.get();
cout<<"tasteaza o fraza: ";
cin.get(s2,100); cin.get();
a=strspn(s1,s2); cout<<a;
return 0; }