Sunteți pe pagina 1din 5

Stringuri în C++

Limbajele de programare au de regulă un tip de date special definit pentru așa numitele
stringuri. Un string memorează un text. Pentru tipul string se definesc de regulă suficiente
operații de prelucrare. În C un șir de caractere cu semn sau fă ră semn devine string cu ajutorul
unei convenții: printre caracterele lui la un monemt dat trebuie să se regă sească un caracter
avâ nd codul ASCII 0. Constanta corespunză toare acestui semn este ‘\0’. Textul reținut într-un
astfel de string C se încheie înaintea primei apariții a unui caracter avâ nd codul ASCII 0. Din
cauză că în C există constanta NULL (folosită pentru adresa vidă ) care are valoarea 0 și din
construcția stringului C se mai spune că un string C este un string NULL- terminat.
ex:
char s[100];
strcpy(s,”Un text.”);
Funcția strcpy de mai sus copiază textul „Un text.” la adresa s, după care adaugă caracterul cu
codul ASCII 0 automat.
Observație: În C o constantă de tip string este dată între ghilimele.
Fiind un tip de date standard C pentru stringul definit NULL-terminat există definite o mulțime
de funcții de prelucrare. Funcțiile de prelucrare a funcțiilor string au antetele în fișierul
”string.h”.
strcat(s1,s2)
La sfâ rșitul stringului s1 este adăugat stringul s2.
Obsevație: Funcțiile de prelucrare a funcțiilor string încep toate cu prefixul „str”.
Strcpy(s1,s2)
Stringul s2 este copiat în stringul s1.
CEVA DESEN
Strstr(s1,s2)
Este că utat stringul s2 în s1. Dacă s2 nu există în s1 funcția returnează valoarea NULL, altfel
returnează adresa de memorie a primei apariții a lui s2 în s1.
Ex:
char* s=”Acesta este un test!”;
char* p=strstr(s,”est”);
ALT DESEN
Se caută est și se returnează adresa la care apare prima dată est.
Observație: Pentru a afla poziția primei apariții a stringului est din exemplul de mai sus relativă
la începutul stringului evaluăm expresia p-s.
Int pos=p-s; //2
Strchr(s,c)
Caută prima apariție a caracterului c în s. Dacă este gă sit returnează adresa de memorie unde se
află prima oară .
Strlen(s)
Returnează lungimea stringului, adică se numă ră câ te caractere se află la adresa spâ nă înainte
de prima apariție a unui caracter cu codul ASCII 0.
Strlwr(s)
Transformă literele mari din stringul s în litere mici.
Strupr(s)
Transformă literele mici din stringul s în litere mari.
Strcmp(s1,s2)
Compară lexico-grafic stringurile s1 și s2. Funcția strcmp returnează o valoare pozitivă dacă s1
este mai mare decâ t s2 din punct de vedere lexical. Returnează 0 dacă stringurile s1 și s2
coincid și o valoare negativă dacă s1 este mai mic decâ t s2 lexical.
Ex: strcmp(“ana”,”Ana Maria”)>0 (‘a’>’A’)
Observație: Câ nd stringurile diferă funcția ctrcmp returnează poziția (cu semn) pe care prima
oară cele două stringuri diferă .
Stricmp(s1,s2)
Se compară stringurile s1 și s2 ca și în cazul funcției strcmp fă ră a se face distincție între litere
mari și litere mici.
Stricmp(“ana”,”Ana Maria”)<0 (-4)
Strset(s,c)
Toate caracterele stringului s devin egale cu caracterul c.
Ex: char s[100];
Strcpy(s,”test”);
strset(s,’*’); //s=”****”
strncat(s1,s2n)
Din stringul s2 se iau cel mult n caractere și se adaugă la sfâ rșitul stringului s1.
Strncpy(s1,s2,n)
Se copiază cel mult n caractere din stringul s2 în stringul s1.
Strnset(s,c,n)
Setează primele cel mult n caractere din s la valoarea c.
Strrev(s)
Oglindește textul reținut în stringul s.
Ex: strcpy(a,”abcd”);
Strrev(s); //s=”dcba”
Strtok
Este o funcție folosită pentru token-izare adică împă rțirea unui string în substringuri delimitate
de unul sau mai multe caractere delimitator.
ex: „ruperea unui text în cuvinte”
char* delim=” ,.;!?:()-”;
char s[100]
gets(s);
char* p=strtok(s,delim);
while(p)
{
puts(p);
p=strtok(NULL,delim);
}
La primul apel al fincției strtok se inițiază tokenizarea stringului primit în primul parametru al
funcției. Dacă este gă sit un token în s se returnează adresa unde acel token a fost depus în
memorie. La al doilea apel al funcției strtok în primul parametru al funcției se dă valoarea NULL,
semn că vrem să continuă m tokenizarea inițiată anterior. Cu un apel al funcției strtok se
returnează succesiv toți tokenii gă siți.

Variabile statice

O variabilă locală într-o funcție poate fi declarată ca fiind statică folosind cuvâ ntul rezervat
static.
ex:
static int i;
Spre deosebire de o variabilă locală obișnuită , variabila statică își pă strează valoarea la
revenirea în funcția respectivă .
ex:
void teststatic()
{
static int n=8;
n++;
printf(“%d\n”,n);
}
void main()
{
for(int i=7;i<10;i++)
teststatic();
}
9
10
11

O variabilă locală nestatică la apelul funcției intră în stiva de execuție și la pă ră sirea funcției iese
din stivă. O variabilă statică ră mâ ne permanent în memorie. În exemplul de mai sus variabilei n i
se alocă o zonă de memorie care es aliberează abea la închiderea programului și în această
locație se depune inițial valoarea 8.

Funcții statice în C

O funcție în C poate fi declarată ca fiind statică .


ex:
static void test()
{
…………………..
}
O funcție declarată statică este cunoscută numai în interiorul fișierului în care apare.
Ex: Imlementarea unei funcții asemă nă toare strtok folosind o variabilă statică funcția
implementată nu va distruge stringul primit după tokenizare.
Observație: Funcția noastră va folosi un singur caracter delimitator.
Fiecare token gă sit va fi returnat într-o locație de memorie nouă .
char* mystrtok(const char* s, char d)
{
static int poz=0;
if(s) poz=0;
int l=strlen(s);
if(poz>=l)
return null;
char*p=strchr(s+poz,d);
if(p)
{
char* r=(char*)malloc(p-s-poz+1);
strncpy(r,s+poz,p-s-poz);
r[p-s-poz+1]=’\0’;
poz=p-s+2;
return r;
}
poz=l;
char* r=(char*)malloc(strlen(s+poz)+1);
strcpy(r,s+poz);
return r;
}
Variabila poz reține poziția de la care se face căutarea în string. La primul apel se face că utare de
la început câ nd trimitem string și poz devine 0. Funcția returnează tokenul gă sit într-o locație
alocată dinamic. Dacă nu se gă sește token se returnează valoarea NULL.
int main()
{
char s[100];
gets(s);
char* p=mystrtok(s,’ ’);
while(p)
{
Puts(p);
Free(p);
P=mystrtok(NULL,’ ’);
}

!!! Trebuie să eliberă m memoria.

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