Sunteți pe pagina 1din 17

Viorel Tompea iruri de caractere C/C++ Clasa a IX-a

iruri de caractere
A. Vectori de caractere
B. Tipul char *
C. Funcii pentru lucrul cu iruri de caractere
1. Vectori de caractere
A1. Declararea vectorilor de caractere
char s1[10];
char s2[10]="sirul 2";
char s3[]="sirul 3";
s1 = vector de caractere care poate conine maxim 9 caractere (s-au alocat 10 octei).
s2 = vector de caractere care poate conine maxim 9 caractere i care conine 7 caractere (s-au alocat 10 octei).
s = vector de caractere care poate conine maxim 7 caractere i car conine 7 caractere (s-au alocat ! octei).
"reeli#
//char s4[];
//char s5[5]="abcdef";
s$ =s-au alocat 0 octei = eroare de compilare
s% =s-au alocat % octei i s-au iniiali&at primele ' po&iii = eroare de compilare
(tenie ))
*ac+ instruciunile pro,ramului adau,+ caractere unui ir de caractere- dep+ind ast.el spaiul alocat-
operaiile se vor e.ectua eronat. /ste posi0il s+ se modi.ice ast.el alte varia0ile. 1e recomand+ alocarea unui
spaiu su.icient de mare pentru evitarea uni ast.el de ca&.
A2.Vizualizarea unui ir de caractere (modul de memorare)
char s[15]=LIMBAJUL C++;
2 3 4 5 ( 6 7 2 8 9 9 :0
- s-au alocat 1% octei
- s-a memorat irul de lun,ime 12
- dup+ ultimul caracter din ir a .ost ad+u,at automat caracterul ;722 (:0 adic+ caracterul cu codul
(1833 0) indic<nd ast.el s.<ritul irului.
- au r+mas li0eri 2 octei
/xplicaii
=entru memorarea unui ir de caractere- compilatorul reine doar adresa primului caracter din ir.
8elelalte caractere vor .i memorate .olosind octeii urm+tori.
8ompilatorul indic+ s.<ritul irului de caractere plas<nd un caracter :0 (caracterul cu codul (1833 0)
dup+ ultimul caracter din ir. (st.el- un ir de caractere este identi.icat de compilator prin adresa de >nceput
(adresa primului caracter din ir) i primul caracter :0 ,+sit printre octeii urm+tori primului caracter.
1
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
/xemplu#
char s1[11]="Informatica";
char s2[100]="sir de lungime maxima 99";
cout <<"s1: "<< s1 << endl;
s2[5]=\0;
cout <<"s2: "<< s2 << endl;
1e va a.ia#
s1: Inor!aticasir de lun"i!e !a#i!a $$
s%: sir d
&#plicaii
?irul s1 conine 11 caractere. =entru acest ir s-au alocat 11 octei. *intre cei 11 octei alocai- unul ar .i
tre0uit s+ .ie re&ervat pentru '()*. 3niiali&<nd irul cu 11 caractere- caracterul '()* nu a mai .ost plasat la s.<ritul
irului.
?irul s% conine %+ de caractere. =entru a-l memora- compilatorul i-a alocat un spaiu de 1)) de octei
>ncep<nd (din >nt<mplare) de la adresa imediat urm+toare s.<ritului lui s1.
*atorit+ .aptului c+ la s.<ritul irului s1 nu exist+ '()*- pentru a-l a.ia- compilatorul parcur,e octeii
succesivi de memorie p<n+ la ,+sirea unui alt '()*. (cesta se va a.la la s.<ritul lui s%.
(l cincilea caracter din s% a .ost >nlocuit cu '()*. =entru a-l a.ia pe s%- compilatorul parcur,e octeii
succesivi- >ncep<nd cu adresa primului caracter din s%- p<n+ la >nt<lnirea unui '()*. (cest '()* va .i ,+sit pe
po&iia %. (st.el compilatorul consider+ c+ acolo se termin+ irul s%.
,-ser.aie:
8aracterul 'a* se memorea&+ pe 1 octet- pe c<nd irul de caractere /a0 se memorea&+ pe doi octei#
a a :0
8aracterul @aA ?irul de caractere BaC
A3. Afiarea vectorilor de caractere.
char s[15]="Informatica";
void main (void)
{
/* 1.*/ cout <<s;
/* 2.*/ for (int i=0; s[i]; i++) cout <<s[i];
/* 3.*/ for (i=0; s[i]; i++) putc (s[i], stdout);
/* 4.*/ for (i=0; s[i]; i++) cout.put(s[i]); cin.get();/*cout<<flush*/
}
2
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
&#plicaii:
1. 12a utili3at aiarea C++.
8ompilatorul cunoate adresa de >nceput a irului de caractere- identi.icat+ prin s. Dncep<nd de la aceast+ adres+- se vor a.ia
coninuturile octeilor urm+tori- p<n+ la >nt<lnirea caracterului '()* (caracterul cu codul (1833 0).
%. 12a utili3at aiarea C++. 4caracter cu caracter5
?irul este a.iat caracter cu caracter .olosind .luxul cout. 1e a.iea&+ primul caracter# s6)7- apoi urm+torul# s6178 .a.m.d.-
p<n+ la >nt<lnirea caracterului '()*.
/xpresia s6i7 va .i evaluat+ ca .iind ) atunci c<nd s6i7 va conine '()A- adic+- caracterul cu codul (1833 0.
9. 12a utili3at aiarea C. 4caracter cu caracter5
1-a a.iat irul caracter cu caracter .olosind .uncia putc.
Euncia putc scrie un caracter >ntr-un .iier indicat de cel de-al doilea parametru. =entru a.iarea pe monitor- cel de-al
doilea parametru tre0uie s+ .ie stdout
Euncia putc este de.init+ >n .iierul stdio.h
putc(F:nF- stdout)G HH 8I 9 2E
putc(10- stdout)G HH 8I 9 2E
putc(1- stdout)G HH 8I
:
12a utili3at aiarea C++. 4caracter cu caracter5
1-a a.iat irul caracter cu caracter .olosind .uncia cout.put45.
=arametru .unciei tre0uie s+ .ie un cod (1833 al caracterului.
Euncia cout.put45 utili&ea&+ un 0u..er (&on+ de memorie) >n care sunt p+strate caracterele
8aracterele apar pe ecran a0ia dup+ ce se tastea&+ un caracter- sau se e.ectuea&+ o nou+ scriere sau citire.
=entru a .ora tip+rirea imediat+ a caracterelor- a.iate cu cout.put se apelea&+# cout;;lush.

Viorel Tompea iruri de caractere C/C++ Clasa a IX-a


A4. Citirea vectorilor de caractere.
char c, s[150];
void main (void)
{
/* 1.*/ cin >> s;
/* 2.*/ cin.get();
cin.get(s,100);
/* 3.*/ gets(s);
/* 4.*/ for (int i=0; (s[i]=getche())!=13; i++);
s[i]='\0';
}
&#plicaii:
1
1-a utili&at citirea 899.
1e vor citi toate caracterele pn la ntlnirea primului spaiu.
*up+ ultimul caracter se adau,+ '()*.
/x. *ac+ se introduce de la tastatur+ irul# Bin.ormatica esteC- dup+ ap+sarea tastei /;T/I- irul va conine
Bin.ormaticaC- lun,imea acestui ir este 11 i s6117 va .i e,al cu '()*.
2 ?irul este citit cu aJutorul .unciei cin."et45 care are trei parametri#
cin.get (vector_de_caractere, int nr, char c=\n)
.ector<de<caractere = vectorul >n care vor .i memorate caracterele cititeG
nr = num+rul maxim de caractere care se vor citiG
c = caracterul care determin+ oprirea citirii.
- sunt citite i caracterele al-e (spaiu- ta0)
- caracterul trimis ca al treilea parametru nu se adau,+ la irG
- dup+ ultimul caracter se adau,+ automat '()*
- ultimul parametru este opional- >n ca&ul >n care lipsete se consider+ c+ este '(n*
=odul de uncionare a unciei:
1e citesc caractere de la tastatur+ p<n+ la ap+sarea tastei &>T&?.
*ac+ num+rul de caractere tastate este mai mic dec<t nr i nu a .ost >nt<lnit caracterul c (implicit @:nA) atunci se vor
memora toate caracterele.
*ac+ num+rul de caractere tastate este mai mare dec<t nr i nu a .ost >nt<lnit caracterul c printre primele nr21
caractere- atunci se vor memora primele nr21 caractere din cele tastate.
*ac+ printre primele nr21 caractere tastate se ,+sete caracterul c atunci se vor memora doar caracterele introduse
>naintea lui c.
Euncia cin."et45 utili&ea&+ o &on+ intermediar+ de memorie 4-uer5 ast.el
- 1e memorea&+ >n 0u..er caracterele care s-au tastat p<n+ la ap+sarea tastei &>T&?.
- 1e anali&ea&+ pe r<nd primele nr21 caractere (dac+ exist+ nr-1 caractere) din 0u..er test<ndu-se dac+ printre
aceste caractere se a.l+ caracterul c. *ac+ se >nt<lnete caracterul c- atunci- toate caracterele tastate >naintea
lui c vor .i adau,ate irului i vor .i eliminate din 0u..er aceste caractere i caracterul c din 0u..er.
*in acest motiv- .olosirea repetat+ a .unciei cin."et 45 poate .unciona eronat. 4otivul este c+- dup+ executarea
unei citiri- este posi0il ca 0u..erul s+ nu se ,oleasc+ complet.
1e .a utili3a :
cin.,et (s1- 100)G
cin.,et()G HH se mai citete un caracter din 0u..er K cu scopul de a elimina acest caracter
cin.,et(s2- 100)G
12a utili3at citirea C.
Euncia "ets citete caracterele tastate p<n+ la ap+sarea tastei &>T&?.
4emorea&+ aceste caractere >n irul primit ca parametru i adau,+ la s.<rit caracterul >@AA.
8itete i spaii al-e.
$
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
*up+ citire creea&+ un rBnd nou pe ecran. =rototipul .unciei se a.l+ >n stdio.L
$ 1-a citit irul caracter cu caracter- p<n+ la >nt<lnirea caracterului cu codul A1CII 194 &>T&?5.
8itirea s-a reali&at cu .uncia "etche 45 care citete un caracter i returnea&+ codul (1833 al caracterului citit.
1e vor citi i spaiile al-e.
8aracterul ;722 nu este automat ad+u,at- din acest motiv- pentru a indica s.<ritul irului tre0uie s+-l ad+u,+m
manual.
Euncia "etche45 citete caracterul /;T/I i-l interpretea&+ # I/T7I */ 8(I (nu trece la linie nou+- trece
doar la cap+tul r<ndului)
=rototipul .uncie se a.l+ >n conio.L
=entru a.iarea irului citit se va proceda ast.el#
for (int i=0; (s1[i]=getche())!=13; i++);
s1[i]='\0';
cout<<endl;
cout<<s1;
A5. Probleme rezolvate
P!"#$%A 1
1e citete de la tastatura o propo3iie ter!inata cu &>T&?. Cu.intele ce or!ea3C propo3iia sunt
despCrite printr2un sin"ur spaiu. 1a se aie3e iecare cu.Bnt din propo3iie pe cate un rBnd.
char s1[150], s2[150];
void main (void)
{
gets (s1);
int i=0, j;
while (s1[i])
{
j=0;
while ((s1[i]!=' ')&&(s1[i]!='\0')) s2[j++]=s1[i++];
s2[j]='\0';
i++;
cout << endl<< s2;
}
}
%
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
P!"#$%A 2
1e citete de la tastatura o propo3iie ter!inata cu D@>CT Cu.intele ce or!ea3C propo3iia sunt
despCrite prin unul sau !ai !ulte spatii 1a se aie3e iecare cu.Bnt din propo3iie pe cate un rBnd.
char s1[150], s2[150];
void main (void)
{
int i, j;
for (i=0; (s1[i]=getche())!='.'; i++);
s1[i]='\0'; i=0;
while (s1[i])
{
j=0;
while ((s1[i]!=' ') && (s1[i]!='\0'))
s2[j++]=s1[i++];
s2[j]='\0';
while (s1[i] && s1[i]==' ') i++;
cout << endl<< s2;
}
}
P!"#$%A 3
1e citete de la tastatura o propo3iie ter!inata cu D@>CT Cu.intele ce or!ea3C propo3iia
sunt despCrite prin unul sau !ai !ulte spatii. 1a se calcule3e de cate ori apare iecare litera din
propo3iie in propo3iie.
char s1[150], s2[150], c;
int nr;
void main (void)
{
clrscr();
int i=0, j;
for (; (s1[i]=getche())!='.'; i++);
for (c='a'; c<='z'; c++)
{
i=0; nr=0;
while (s1[i])
{
if (s1[i]==c) nr++;
i++;
}
if (nr==1) cout <<endl<<"Litera "<<c<<" apare o singura data";
if (nr>1) cout <<endl<<"Litera "<<c<<" apare de "<<nr<< " ori";
}
for (c='A'; c<='Z'; c++)
{
i=0; nr=0;
while (s1[i])
{
if (s1[i]==c) nr++;
i++;
}
if (nr==1) cout <<endl<<"Litera "<<c<<" apare o singura data";
if (nr>1) cout <<endl<<"Litera "<<c<<" apare de "<<nr<< " ori";
'
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
}
getch();
}
7
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
P!"#$%A 4
1e citeste o propo3itie ter!inata cu punct. Cu.intele sunt despartite printr2un sin"ur spatiu.
1a se aise3e iecare cu.ant din propo3itie pe cate un rand si in dreapta sa in.ersul sau.
char s[200], p[30], q[30];
int i,j,;
!"id #ain $!"id%
&
clrscr$%;
f"r $i=0; $s[i]='etche$%%(=)*);i++%;
s[i]=,-0,;
f"r $i=0,c"ut..endl ; s[i] ; i++,c"ut..q..endl%
&
f"r $j=0; s[i] // s[i](=32; p[j++]=s[i++]%;
p[j]=0;
f"r$=0,c"ut..p.." "; j ; q[++]=p[00j]%;
q[]=0;
1
'etch$%;
1
P!"#$%A 5
1e citete o propo3iie ter!inatC cu punct. Cu.intele sunt despCrite printr2un sin"ur spaiu. 1C se
EnlocuiascC iecare litera !icC din ir cu litera !are corespun3Ctoare si iecare litera !are cu litera !icC
corespun3Ctoare.
char s[200];
int i;
!"id #ain $!"id%
&
clrscr$%;
f"r $i=0; $s[i]='etche$%%(=)*);i++%;
s[i]=0;
c"ut ..endl; puts$s%;
f"r $i=0;s[i];i++%
if $$)a).=s[i]% // $s[i].=)2)%%
s[i]0=32;
else
if $$)3).=s[i]% // $s[i].=)4)%%
s[i]+=32;
c"ut ..endl; puts$s%;
'etch$%;
1
!
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
P!"#$%A &
1e citete un cu.Bnt. 1C se decidC dacC este palindro!.
char s[200],"=1;
int i,j;
!"id #ain $!"id%
&
clrscr$%;
cin 55 s;
f"r $i=0; s[i]; i++%;
f"r $j=0; j.=$i01%/2+$i01%62 // "; j++%
"=$s[j]==s[i010j]%;
" 7 c"ut.."83"9 c"ut..":;";
'etch$%;
1
P!"#$%A '
1e citete o propo3iie ter!inatC cu punct. Cu.intele sunt despCrite printr2un sin"ur spaiu. 1C se
aise3e cu.Bntul de lun"i!e !a#i!C.
cLar sM200NG
int i-J-O=0- max=0- po&Pmax=0G
void main (void)
Q
clrscr()G
.or (i=0G (sMiN=,etcLe()))=F.FGi99)G
s[i]=0;
f"r $i=0; s[i] ; i++%
&
f"r $j=0, =i; s[i] // s[i](=32; i++,j++%;
if $j5#a<%
&
#a<=j;
p"2=#a<=;
1
1
f"r $c"ut..endl,i=p"2=#a<; s[i]//s[i](=) ); c"ut..s[i++]%;
'etch$%;
1
9
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
Tipul cLar R
/xemplu#
S 3nclude Tiostream.LU
void main()
Q
cLar aMN=CmasaCG
coutTTa91TTC BTTa92TTC BTTa9G
V
3n urma executiei se tipareste# asa sa a
(ceasta deoarece lim0aJul c99 permite ca un vector de caractere sa .ie adresat incepind de la un anumit octet al sau.
-cind scriem a91 adresam vectorul incepind cu al doilea octet
-cind scriem a92 adresam vectorul incepind cu al treilea octet
4ai mult putem adresa orice octet dorim. *e exemplu (a91)M0N retine caracterul @aA- (a91)M1N retine caracterul @sA deoarece
elementele vectorului de caractere sunt memorati la adrese succesive de memorie.
Varia0ilele de tip pointer retin adresa de memorie la care este memorata o anumita varia0ila. *eclararea unei varia0ile de
un anumit tip determina compilatorul ca in momentul executiei pro,ramului sa aloce o &ona de memorie pentru acea
varia0ila la o anumita adresa. Eiecare octet (0Wte) de memorie se ,aseste la o anumita adresa care de o0icei se exprima in
Lexa&ecimal (0a&a 1').
3n 899 vectorii de caractere au urmatoarele caracteristici#
-.iecare caracter este memorat pe un octet
- elementele vectorului de caractere sunt memorate la adrese succesive de memorie.
-prin de.initie adresa unui vector de caractere este adresa primului sau octet
-o varia0ila de tip cLarR poate retine adresa primului octet al unui sir ( cLar R este un tip de date numit pointer la
caracter)
-3n 899 numele unui vector de caractere retine adresa primului sau octet si poate .i atri0uit unei varia0ile de tip cLar R.

/xemplu#
SincludeTiostream.LU
void main()
Q
cLar aMN=C3n.ormaticaC- RpG HH am declarat o varia0ila a de tip vector de caractere- am initiali&at-o cu un sir- si o
varia0ila de tip cLar R numita p
p=aG coutTTpTTendlG HHvaria0ila p retine adresa vectorului a- adica adresa primului sau octetGse tip tot sirul
p99G coutTTpTTendlG HHacum p va retine adresa urmatorului octet (caracter)
p99G coutTTpTTendlG
coutTTpM1NTTendlG HHvectorul se poate adresa si pe octeti tiparind un anumit caracter
Functii care lucrea3a cu siruri de caractere
2im0aJul 899 pune la dispo&itia pro,ramatorilor anumite .unctii speci.ice sirurilor de caractere. =entru a le putea apela in
pro,rame tre0uie sa includem .isierul Leader strin,.L.
1. Eunctia 1T?A&> are .orma ,enerala#
1i3e<t strlen 4char *5F
si are rolul de a returna lun,imea e.ectiva a unui sir (.ara caracterul nul).
unde
-si&ePt este un tip intre, (unsi,ned int)
-cLar R este vectorul de caractere a carui lun,ime dorim s-o determinam
10
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
/xemplu# =ro,ramul urmator citeste un sir si a.isea&a nr de caractere pe care le are sirul citit.
SincludeTiostream.LU
SincludeTstrin,.LU
void main()
Q
cLar aM100NG
cin.,et (a-100)G
coutTTC1irul citit are CTTstrlen(a)TTC caractereCG
V
2 Eunctia 1TI8=X are .orma ,enerala#
Char *strcpG 4char * dest8 char * sursa5F
si are rolul de a copia sirul de la adresa sursa la adresa dest.8opierea se termina dupa ce a .ost copiat caracterul ;ul.
Eunctia returnea&a adresa destinatie.
/xemplu#
SincludeTiostream.LU
SincludeTstrin,.LU
void main()
Q
cLar aM100N=Cun sirC-0M100N=C alt sirCG
strcpW(a-0)G
coutTTaG
V
3n pro,ramul de mai sus se copia&a in sirul de caractere a sirul de caractere retinut de 0.=ro,ramul va a.isa Balt sirCG
Eunctia 1TI8(T are .orma ,enerala#
char *strcat 4char *dest8 char *sursa5F
si are rolul de a adau,a sirului de adresa dest sirul de adresa sursa. 1irul de adresa sursa ramane nemodi.icat. (ceasta
operatie se numeste concatenare si nu este comutativa. Eunctia returnea&a adresa sirului destinatie - iar sirul va avea ca
lun,ime - suma lun,imilor celor 2 siruri care au .ost concatenate. =ro,ramul urmator tipareste Bmama mer,eC.
SincludeTiostream.LU
SincludeTstrin,.LU
void main()
Q
cLar aM20N=CmamaC-0M10N=Cmer,eCG
strcat(a-0)G
coutTTaG
$. Eunctia 1TI;8(T are .orma ,enerala#
char *strncat 4char *dest8 const char *sursa8 si3e<t nr5F
si are rolul de a adau,a sirului de adresa dest primii n octeti ai sirului de adresa sursa. Eunctia returnea&a adresa sirului
destinatie.
%. Eunctia 1TI8YI are .orma ,enerala#
cLar RstrcLr (cLar Rs- int c)G
11
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
si are rolul de a cauta caracterul c in sirul s. 8autarea se .ace de la stin,a la dreapta. 3n ca&ul in care caracterul este ,asit
.unctia intoarce adresa su0sirului care incepe cu prima aparitie a caracterului citit si se termina cu caracterul nul al sirului
in care se .ace cautarea. (lt.el intoarce o expresie de tip cLarR cu valoarea 0.
/xemple#
3n pro,ramul urmator se cauta in sirul a caracterul t. (cesta este ,asit- iar pro,ramul tipareste sirul Bta esteC. /vident-
acesta este su0sirul care incepe cu caracterul @tA.
SincludeTiostream.LU
SincludeTstrin,.LU
void main()
Q
cLar aM20N=Cacesta esteCG
coutTTstrcLr(a- @tA)G
V
Aplicatia 1:
3n unele ca&uri ne interesea&a indicele in cadrul vectorului al caracterului cautat. (cesta se o0tine ca di.erenta intre 2
valori de tipul cLarR. =ro,ramul de mai Jos tipareste indicele primei aparitii a caracterului @tA si anume $.
SincludeTiostream.LU
SincludeTstrin,.LU
void main()
Q
cLar aM100N=Cacesta esteCG
coutTTstrcLr(a-AtA)-aG
V
(plicatia 2# 3n pro,ramul urmator se listea&a indicii tuturor aparitiilor caracterului citit in sir.
SincludeTiostream.LU
SincludeTstrin,.LU
void main()
Q
cLar aM100N- Rt-cG
coutTTCintroduceti sirul#CG
cin.,et(a-100)G
coutTTC8aracterul cautat#CG
cinUUcG
t=a-1G
do
Q
t99G
t=strcLr(t-c)G
i. (t) coutTTCindicele este# CTTt-aTTendlG
V ZLile (t)G
V
'. Eunctia 1TII8YI are .orma ,enerala#
cLar RstrrcLr (const cLar Rs- int c)G
si are acelasi rol cu strcLr- cu deose0irea ca returnea&a adresa ultimei aparitii a caracterului (cautarea se .ace de la dreapta
la stin,a).
7. Eunctia 1TI84= are .orma ,enerala#
int strcmp (const cLar Rs1- const cLar Rs2)G
12
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
si are rolul de a compara doua siruri de caractere.
Valoarea returnata este#
T0 daca s1Ts2
=0 daca s1=s2
U0 daca s1Us2
/xemple#
BsoareC U BsC
BtataC U BmamaC
=ro,ramul urmator testea&a relatia de ordine dintre doua cuvinte#
SincludeTiostream.LU
SincludeTconio.LU
void main()
Q
cLar aM100N- 0M100NG
int semnalG
coutTTC3ntroduceti sirul a#CGcinUUaG
coutTTC3ntroduceti sirul 0#CGcinUU0G
semnal=strcmp(a-0)G
i. (semnalT0) coutTTCaT0CG
else
i. (semnalU0) coutTTCaU0CG
else coutTTCa=0CG
V
[0s#.Eunctia strcmp nu .ace distinctie intre litere mari si litere mici
(aplicatia $ din manual la la0orator)
! Eunctia 1TI1TI are .orma ,enerala#
cLar Rstrstr (const cLar Rs1- const cLar Rs2)G
si are rolul de a identi.ica daca sirul s2 este su0sir al sirului s1. *aca acesta este identi.icat- .unctia returnea&a adresa de
inceput a sirului s2 in cadrul sirului s1- alt.el returnea&a 0. 8autarea se .ace de la stin,a la dreapta. 3n ca&ul in care s2
apare de mai multe ori in cadrul lui s1- se returnea&a adresa de inceput a primei aparitii.
/xemplu#
8Lar s1MN=CxW&tC- s2=CW&C- atunci strstr(s1-s2) returnea&a s191 (adresa caracterului W in s1)
(aplicatiile %-'-7 din manual la la0orator)
9. Eunctia 1TI384= are .orma ,enerala#
int stricmp (cLar Rs1- cLar Rs2)G
si are acelasi rol ca strcmp. *i.erenta este ca .ace distinctie intre literele mari si mici ale al.a0etului.
10. Eunctia 1TIT[\ are .orma ,enerala#
cLar RstrtoO (cLar Rs1- const cLar Rs2)G
=rincipiul de executie este urmatorul#
1irul s1 este considerat ca .iind alcatuit din 0-1-]n entitati separate prin unul sau mai multe caractere cu rol de
separator- iar sirul s2 ca .iind alcatuit din unul sau mai multe caractere cu rol de separator.
/xemplu# sirul s1 este B mama- tata si 0uniculC- iar sirul s2 este B -C.3ntrucit caracterele separatoare sunt 0lanOul si
vir,ula- re&ulta ca entitatile sunt# BmamaC- BtataC- BsiC- B0uniculC.
1
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
la prima apelare care tre0uie sa .ie de .orma strtoO(s1-s2) .unctia intoarce adresa primului caracter al primei entitati
-in exemplu BmamaC. 3n plus- dupa prima entitate separatorul este inlocuit automat prin caracterul nul (codul (1833
0)
urmatoarele apeluri ale .unctiei sunt de .orma strtoO (;722- s2)- iar .unctia intoarce de .iecare data adresa primului
caracter al urmatoarei entitati si dupa ea este adau,at automat caracterul nul.
]]]
in momentul in care sirul ramas nu mai contine entitati- .unctia intoarce adresa nula.
/xemplu# 3n pro,ramul urmator se citeste un sir de caractere. /ntitatile se considera a .i cuvinte - separate prin 0lanO-uri
sau vir,ule. =ro,ramul tipareste .iecare entitate pe cite un rand.
SincludeTiostream.L
SincludeTstrin,.LU
void main()
Q
cLar sirM1000N- separatorMN=C -C- RpG
cin.,et(sir-1000)G
p=strtoO (sir-separator)G
ZLile (p)
Q
coutTTpTTendlG
p=strtoO(;722- separator)G
V
V
Varia0ila p retine adresa de inceput a entitatii. *aca entitatea este ,asita- p va retine o valoare di.erita de 0- ca& in care
entitatea este a.isata si se va cauta urmatoarea entitate.
Eunctia 1I2^I are .orma ,enerala#
8Lar RstrlZr (cLar Rs)G
1i are rolul de a converti toate literele mari in litere mici. Iestul caracterelor raman nescLim0ate. Eunctia intoarce adresa
sG
Eunctia 1TI7=I are .orma ,enerala#
8Lar Rstrupr (cLar Rs)G
1i are rolul de a converti toate literele mici in litere mari. Iestul caracterelor raman nescLim0ate. Eunctia intoarce adresa
s.
/xemplu# 3n pro,ramul urmator se citeste un cuvint. 8uvintul citit se tipareste cu litere mari.
SincludeTiostream.LU
SincludeTstrin,.LU
void main()
Q
cLar aM20NG
coutTTCintroduceti cuvintul#CGcinUUaG
coutTTstrupr(a)G
V
Eunctia 1TI=5I\ are .orma ,enerala#
8Lar Rstrp0rO (cLar Rs1- cLar Rs2)G
1i actionea&a in .elul urmator#
1$
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
cauta primul caracter al sirului s1 in s2. *aca este ,asit returnea&a adresa sa din cadrul sirului s1 si executia se
termine- alt.el se trece la pasul urmator
cauta al doilea caracter al sirului s1 in s2. *aca este ,asit returnea&a adresa sa din cadrul sirului s1 si executia se
termina- alt.el se trece la pasul urmator.
]]
daca nici un caracter al sirului s1 nu apartine sirului s2- .unctia returnea&a adresa nula.
/xemplu# Eie cLar Rs1=Ca0cde.,LiJOlmnop_rstuvZxW&C - Rs2=Cc12CG
(tunci strp0rO (s1-s2) returnea&a adresa s192 -adresa caracterului c- pentru ca acesta este primul caracter din s1
care se ,aseste in s2
1e citesc 2 cuvinte. 1a se a.ise&e toate caracterele primului cuvint care se ,asesc in al doilea.
SincludeTiostream.LU
SincludeTstrin,.LU
void main()
Q
cLar cuvint1M10N- cuvint2M10N- RpG
coutTTC3ntroduceti primul cuvint#CGcinUUcuvint1G
coutTTC3ntroduceti al doilea cuvint#CGcinUUcuvint2G
p=strp0rO (cuvint1- cuvint2)G
ZLile (p)
Q
coutTTpM0NTTendlG
p99G
p=strp0rO(p-cuvint2)G
V
V
8aracterele primului cuvint- incepind de la primul- sunt cautate in al doilea cuvint. [rice caracter ,asit se tipareste.
(ceasta se .ace pornind de la adresa sirului returnata de strp0rO. (poi varia0ila care contine aceasta adresa se
incrementea&a. (ceasta pentru ca- la urmatoarea cautare- sa nu .ie returnata aceeasi adresa de sir.
Eunctia 1T??&V4 5 e.ectuea&a inversarea sirului de caractere s. Eunctia returnea&a adresa sirului inversat. (re sintaxa#
char * 1T??&V 4char *s5
Eunctia 1T?1D>4 5 intoarce ca re&ultat nr de caractere consecutive din sirul s1- incepind cu primul caracter- care se
re,asesc in s2. (re sintaxa#
int 1T?1D>4char *s18 char *s%5
Eunctia 1T?C1D>4 5 intoarce ca re&ultat nr de caractere consecutive din sirul s1- incepind cu primul caracter- care ;7 se
re,asesc in s2. (re sintaxa#
int 1T?C1D>4char *s18 char *s%5
1%
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
Functii pentru con.ersia .alorilor nu!erice in sir si in.ers
Con.ersia unui sir de caractere intr2un nu!ar:
(ceste .unctii au prototipul in .isierul Leader stdli0.L
Eunctia AT,F4 5 converteste un sir catre tipul dou0le. *aca conversia esuea&a(se intilneste un caracter nenumeric)
valoarea intoarsa este 0. *aca primele caractere ale sirului sunt al0e- acestea sunt i,norate. (re .orma ,enerala#
Hou-le AT,F 4const char *s5F
(aplicatia 1$ de la tipul RcLar la la0orator)
Eunctia <AT,AH4 5 converteste un sir catre tipul lon, dou0le.
lon" dou-le <AT,AH 4const char *s5F
Eunctia AT,I4 5 converteste un sir catre tipul int.
Int AT,I 4const char *s5F
Eunctia AT,A4 5 converteste un sir catre tipul int.
lon" AT,A 4const char *s5F
Eunctia 1T?T,A4 5 converteste sirul de caractere sir intr-o valoare numerica intrea,a de tip lon,. Eunctiei 3 se .urni&ea&a
0a&a de numeratie prin parametrul 0. Eunctia .urni&ea&a prin parametrul p po&itia primului caracter care nu poate .i
convertit. (re .orma ,enerala#
lon" 1T?T,A 4sir8 Ip8 -5
/xemplu#
SincludeTiostream.LU
SincludeTstdli0.LU
SincludeTstrin,.LU
void main()
Q
cLar Rsir=C12$%'7!9C- RpG
int n1G lon, n2G dou0le nG lon, dou0le n$G
n1=atoi(sir)G n2=atol(sir)G
coutTTn1TTC BTTn2TTendlG HH a.isea&a K10% 12$%'7! 9
strcpW(sir- B12$%.'7!9C)G
n1=atoi (sir)G n2=atol (sir)G n=ato. (sir)G n$=Patold(sir)G
coutTTn1TTC BTTn2TTC BTTnTTC BTTn$TTendlG HH 12$% 12$% 12$%.'7!9 12$%.'7!9
strcpW(sir-C12(aC)G strtol(sir-`p-1')G
i. ()Rp) coutTTCconversia a reusit -UCTTn2G
else coutTTC;u s-au putut converti decit primele BTTp-sirTT B caractere -U CTTn2G
V
Functii pentru con.ersia unui nu!ar intr2un sir de caractere
Eunctia IT,A4 5 are rolul de a converti o valoare de tip int in sir- care este memorat in varia0ila sir. Valoarea 0 retine 0a&a
de numeratie catre care sa se .aca conversia (de o0icei 0a&a este 10). 3n ca&ul 0a&ei 10- sirul o0tinut retine si eventualul
semn -. Eunctia intoarce adresa sirului o0tinut.
(re .orma ,enerala# int IT,A 4n8 sir8 -5
Eunctia AT,A4 5 converteste in sirul de caractere sir o valoare numerica intrea,a n exprimata in 0a&a de numeratie 0.
ltoa 4n8 sir8 -5
Eunctia &CVT4 5 converteste intr-un sir de caractere o valoare numerica reala in vir,ula mo0ila du0la preci&ie
n. =arametrul m preci&ea&a numarul de caractere ale sirului. *aca numarul are mai putine ci.re decit m- se va
completa la dreapta cu caracterul ci.ra 0- pina se o0tin cele m caractere. Eunctia .urni&ea&a prin numele ei
adresa sirului de caractere- prin parametrul p K po&itia punctului &ecimal- si prin parametrul s-semnul.
Hou-le &CVT4 n8 !8 Ip8 Is5
1'
Viorel Tompea iruri de caractere C/C++ Clasa a IX-a
/x#
SincludeTiostream.LU
SincludeTstdli0.LU
void main()
Q
cLar sirM2%N- RscG
dou0le nG int n1=-12$%-m-p-sG
lon, n2=21$%'7!9G
itoa(n1-sir-10)G coutTTn1TTC BsirTTendl HH am convertit valoarea numerica n1 in sir -12$% -12$%
n1=12$%G itoa(n1-sir-10)G coutTTn1TTC BsirTTendl HH 12$% 12$%
ltoa(n2-sir-10)G coutTTn2TTC BTTsirTTendlG HHam conv. valoarea lon, in sir 21$%'7!9 21$%'7!9
n=9.!7'%$G m=10G sc=ecvt(n-m-`p-`s)G
coutTTscTTC BTTpTTC BTTsTTendl HH9!7'%$0000 1 0 (semnului 9 ii corepunde valoarea 0)
n= -12.$%'G m=1%Gsc=ecvt(n-m-`p-`s)G
coutTTscTTC BTTpTTC BTTsTTendl HH12$%'000000000 1 (semnului K ii corespunde valoarea 1)
V
17

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