Sunteți pe pagina 1din 2

SIRURI DE CARACTERE/

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;

cin.get(sir, nrcaractere, c_end);


Functia cin.get citeste un sir de
caractere pana cand au fost citite
nrcaractere-1 caractere sau pana
s-a intalnit caracterul c_end.
Parametrul c_end poate lipsi.
Implicit acesta este \n (new line).
Pot fi citite si caracterele albe,
caracterul nul este inserat automat
iar caracterul transmis ca ultim
parametru nu este inserat in sir.
Exemple:
char sir[30]="informatica";
cin.get(sir,5,?); //variabila sir
va retine info
cin.get(sir,15,*); //variabila sir
va retine informatica
cin.get(sir,15,o); //variabila sir
va retine inf deoarece s-a intalnit
caracterul 'o' pe a
patra pozitie in sir
cin.get(sir,4,c); //variabila a va
retine inf
cin.get(sir,15);
//variabila a va
retine informatica
Funcii care lucreaz cu siruri de
caractere (#include<string.h>)
Functia strlen( )
Are rolul de a returna lungimea unui
ir(fr a lua n considerare
caracterul nul). Forma general :
strlen(nume sir);
2 Functia de copiere a unui sir.
Forma general:
strcpy(destinatie,sursa)
Funcia are rolul de a copia
(inlocuieste ) irul de la adresa sursa
la adresa destinaie.
Forma general:
strcat
(destinatie, surs)
Funcia are rolul de a aduga sirului
de la adresa destinatie sirul de la
adresa surs.
4. Functia de adaugare a primelor n
caractere din al doilea sir
Forma general: strncat
(destinaie, surs, n)
Funcia adaug irului destinaie
primii n octei ai irului surs.
5. Functia de cautare a unui
character
Forma general: strchr (nume ir,
'caracter' )

Functia cut n sirul nume ir


caracterul caracter i returneaz
subsirul care ncepe cu prima
apariie a caracterului citit.
6. Functia care returneaz adresa
ultimei aparitii a caracterului cutat
strrchr (ir, 'caracter' )
7. Functia de comparare a doua
siruri
Forma general strcmp (sir1, sir2 )
Functia are rolul de a compara 2
siruri de caractere i va returna
valoarea: < 0 dac sir1<sir2 = 0
dac sir1=sir2 > 0 dac sir1 >sir2
Exemplu Se compar sirul a cu sirul
b i se listeaz relatia dintre cele 2
siruri astfel:
- dac primele n caractere sunt
identice se compar caracterele n+1
- dac caracterul n+1 al sirului a
este situat alfabetic naintea
caracterului n+1 al sirului b se
afiseaz a<b
- dac caracterul n+1 al sirului a
este situat alfabetic dup caracterul
n+1 al sirului b se afiseaz a>b
- dac primul caracter al sirului a
este situat alfabetic naintea
primului caracter al sirului b se

afiseaz a<b indiferent de lungimea


celor 2 siruri
- dac primul caracter al sirului a
este situat alfabetic dup primul
caracter al sirului b se afiseaz a>b
indiferent de lungimea celor 2 siruri
8. Functiile strlwr i struwr
strlwr(s1) - convertete toate literele
irului s1 n litere mici strupr(s2)
-convertete toate literele irului s2
n litere mari
9. Funcia care identific dac irul
sir2 este subir al irului sir1 Forma
general: strstr (sir1, sir2)
Se citete de la tastatur un cuvnt.
S se afieze numrul iniial de
caractere ale cuvntului i apoi s se
tearg toate vocalele din cuvnt.
10. Functia strcspn ()
Forma general: strcspn(s1,s2)
Functia returneaz numrul
caracterelor din sirul s1 care nu se
gsesc n sirul s2
#include <iostream>
#include<string.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=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; }

S-ar putea să vă placă și