Sunteți pe pagina 1din 3

#include <cstring>

1) strlen(s)
nu numara NULL
char s[]="acasa";
strlen(s) va fi 5, s[0] va fi 'a', iar s[5] va fi NULL
GRESIT cin.get(s,strlen(s));
CORECT cin.get(s,sizeof(s));

GRESIT
int l=strlen(s);
char s[100];
cin.get(s,100);

2) strcpy(s1,s2)
copiaza continutul sirului s2 in sirul s1
exp
strcpy(s1, "bac");
strcpy(s2,s1);
obs. functia strcpy se foloseste si pentru a sterge prin suprascriere unul sau mai
multe caractere alaturate dintr-un sir
exp1
char aux[10], s[10]="fizica";
strcpy(aux, s+1); => in aux copiez subsirul lui s care incepe la pozitia 1=> izica
strcpy(s,aux); => peste sirul s copiez ceea ce am in auxiliar
cout<<s;=> izica
In code blocks merge si direct strcpy(s,s+1) pt a sterge primul caracter din s, dar
nu merge pe orice compilator
exp2
in general pentru a sterge caracterul de pe pozitia i
strcpy(aux, s+i+1)
strcpy(s+i, aux); sau direct, insa nestandard strcpy(s+i,s+i+1)
Aplicatie: stergeti toate spatiile dintr-un sir citit de la tastatura

3) strcmp(s1,s2) compara lexicografic 2 siruri de caractere, pe baza codurilor lor


ASCII
"ab"<"abc"
"CDEF"<"aa" pt ca 'a' are codul ASCII 97, iar 'C' are codul ASCII 67
strcmp(s1, s2) returneaza
0 daca sirurile concid
>0 daca s1>s2
<0 daca s1<s2
obs strcmp nu se foloseste pt a compara caractere, ea e definita pt siruri,
caracterele se compara cu ajutorul operatorilor relationali (</<=/>/>=)
Aplicatie:
vom citi numele a n elevi si-i vom afisa in ordine alfabetica
3
Oprea Bianca
Cozma Daria
Pitis Bianca

4) strcat(s1,s2)
concateneaza pe s2 la finalul lui s1 (s1 si s2 sunt obligatoriu siruri)

char s[10]="info";
strcat(s,"***"); => s va fi info***
strcat(s,'*'); => NU MERGE pt ca '*' este caracter si nu sir
strcat(s,"*"); => s va fi info*

Adaugati la finalul sirului s primul sau caracter


int L=strlen(s); => pe poz L va fi NULL
s[L]=s[0]; s[L+1]=NULL;

Obs strcat se foloseste atunci cand formam un sir nou prin concatenari succesive.
In acest caz sirul nou trebuie sa porneasca obligatoriu de la sirul vid <=>
char nou[100]; nou[0]=NULL;
char nou[100]="";
sau declaram global

2') strncpy(s1, s2, n);


-> copiaza in s1 primele n caractere din s2
-> NU pune NULL la final, prin urmare daca in continuare lucram cu s1 ca sir
de caractere, adaugam s1[n]=NULL;
3') strncmp(s1, s2, n)
-> compara primele n caractere din s1 cu primele n caractere din s2
4') strncat (s1, s2, n)
-> concateneaza la finalul lui s1, primele n caractere din s2, aici pune NULL

5) strchr (s,c) cauta caracterul c in sirul s


=> daca nu gaseste returneaza NULL
=> daca gaseste, returneaza un pointer catre char ce retine adresa de memorie unde-
l gaseste prima data <=> daca prima aparitie a caraterului c este pe pozitia k =>
va returna adresa de memorie s+k
ex 1) afisati pozitia primului spatiu in sirul s, daca exista
char *p;
p=strchr(s,' ');
if (p==NULL) cout<<"nu exista";
else cout<<"prima aparitie este la pozitia"<<p-s;

ex 2) cate vocale contine sirul s


for (i=0;i<strlen(s);i++)
if (strchr("aeiouAEIOU",s[i])!=NULL) nr++;
ex 3) inlocuiti fiecare vocala mica cu vocala mare corespunzatoare si fiecare
vocala mare cu vocala mica corecpunzatoare
Info => infO
for (i=0;i<strlen(s);i++)
if (strchr("aeiou",s[i])!=NULL) s[i]=s[i]-32;
else
if (strchr("AEIOU",s[i])!=NULL) s[i]=s[i]+32;

for (i=0;i<strlen(s);i++)
{
if (strchr("aeiou",s[i])!=NULL) s[i]=s[i]-32;
if (strchr("AEIOU",s[i])!=NULL) s[i]=s[i]+32;
}

6) strstr(s,s1) cauta sirul s1 in sirul s


=> daca nu gaseste returneaza NULL
=> daca gaseste, returneaza un pointer catre char ce retine adresa de memorie unde-
l gaseste prima data <=> daca prima aparitie a sirului s1 este pe pozitia k => va
returna adresa de memorie s+k

7) strtok se foloseste pentru a identifica unitatile lexicale dintr-un sir pe baza


unui sir de separatori
"sparge" sirul in cuvinte
dupa aplicarea lui strtok, sirul initial se pierde

char s[200], sep[]=" ,.!?", *p;


cin.get(s,200);
p=strtok(s,sep);
while (p!=NULL)
{
... // prelucrez cuvantul curent indicat de p, de exemplu cout<<p<<'\n';
p=strtok(NULL,sep);
}

Obs.
***2 cuvinte pot fi despartite printr-unul sau mai multi separatori
***chiar daca avem ca separator doar spatiul, tot ghilimele folosim, pt ca al
doilea parametru al functiei strtok este sir si nu caracter
***nu e obligatoriu sa declaram variabila sep, putem lucra direct
p=strtok(s," .,");

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