String-uri (Cap. 9)

             Ne propunem să studiem modul în care se memorează şi cum se lucrează cu un string în
limbajul C.
În C, un şir de caractere care se termină cu caracterul NULL sau ‘\0’ sau pur şi simplu 0
(de unde şi denumirea de şir de caractere NULL terminat) este echivalentul noţiunii de string din
alte limbaje (cum ar fi de exemplu limbajul Pascal). În consecinţă, în C o variabilă string este de
fapt un pointer de tipul char. Fiind vorba de un şir, alocarea memoriei pentru un string se poate
face atât static cât şi dinamic.
În fişierul antet stdio.h avem definite funcţiile gets şi puts pentru citirea unui string de la
tastatură, respectiv afişarea pe ecran a unui string. Ambele funcţii primesc ca parametru o
variabilă de tip pointer către tipul char.
Funcţia gets, spre deosebire de scanf poate citi string-uri care conţin spaţii. În cazul
funcţiei scanf se consideră încheiată introducerea unei valori pentru o variabilă când se întâlneşte
caracterul spaţiu sau unde s-a apăsat Enter. De exemplu, dacă se citeşte Popescu Ioan pentru un
string s de la tastatură cu gets(s), atunci la adresa s se depun caracterele Popescu Ioan’\0’. Dacă
citirea se face însă cu scanf(“%d”,s), atunci la adresa s se depun caracterele Popescu’\0’ (citirea
lui s se încheie la apariţia spaţiului).
Dacă se afişează un string s cu puts(s); atunci după afişarea şirului de la adresa s se face
salt la începutul liniei următoare, ceea ce nu se întâmplă dacă afişarea se face cu printf(“%s”,s).
Fişierul antet string.h conţine definiţiile funcţiilor C de lucru cu string-uri:

1) strcat(s1, s2) la sfârşitul string-ului s1 se adaugă s2 şi caracterul ‘\0’.
2) strchr(s,c) returnează adresa de memorie către prima apariţie a caracterului c în
string-ul s. Dacă nu există caracterul în string, se returnează adresa nulă ( NULL).
3) strcmp(s1,s2) returnează o valoare întreagă care dacă este 0, înseamnă că şirurile sunt
identice ca şi conţinut. Dacă valoarea returnată este negativă, atunci înseamnă că
string-ul s1 este înaintea lui s2 din punct de vedere lexicografic (alfabetic). Dacă însă
valoarea returnată este pozitivă, atunci înseamnă că string-ul s1 este după s2 din punct
de vedere lexicografic.
4) stricmp(s1,s2) face acelaşi lucru ca şi strcmp, cu deosebirea că nu se face distincţie
între litere mari şi mici.
5) strcnmp(s1,s2,n) realizează o comparaţie între primele cel mult n caractere ale stringurilor
s1 şi s2.
6) strcnmpi(s1,s2,n) realizează o comparaţie între primele cel mult n caractere ale stringurilor
s1 şi s2 fără a se face distincţie între litere mari şi mici.
7) strcpy(s1,s2) copiază caracterele de la adresa s2 (până se întâlneşte inclusiv caracterul
‘\0’) la adresa s1. Cu alte cuvinte, se copiază conţinutul string-ului s2 peste string-ul
s1.

8) strlen(s) returnează lungimea string-ului s (numărul de caractere până la ‘\0’).
9) strlwr(s) transformă literele mari din string-ul s în litere mici.
10) strupr(s) transformă literele mici din string-ul s în litere mari.
11) strncat(s1,s2,n) adaugă la sfârşitul string-ului s1 cel mult n caractere din string-ul s2,
după care se adaugă caracterul ‘\0’.
12) strncpy(s1,s2,n) copiază cel mult n caractere de la începutul string-ului s2 la adresa
s1, după care se adaugă la sfârşit caracterul ‘ \0’.
13) strnset(s,c,n) setează primele n caractere ale string-ului s la valoarea primită în
parametrul c.
14) strpbrk(s1,s2) returnează adresa de memorie la care apare prima dată un caracter din
string-ul s2 în string-ul s1.
15) strchr(s,c) returnează adresa la care apare ultima dată caracterul c în string-ul s.
16) strrev(s) inversează caracterele string-ului s (primul se schimbă cu ultimul, al doilea
cu penultimul etc.).
17) strset(s,c) setează toate caracterele string-ului s (până la ‘\0’) la valoarea primită în
parametrul c de tip char.
18) strstr(s1,s2) returnează adresa de memorie la care apare prima dată string-ul s2 în s1.
Dacă s2 nu apare în s1, atunci se returnează adresa nulă NULL.
19) strxfrm(s1,s2,n) înlocuieşte primele cel mult n caractere ale string-ului s1 cu primele
cel mult n caractere din string-ul s2.

String-ul se memorează în C într-un şir de caractere obişnuit. Caracterul ‘\0’ (caracterul
cu codul ASCII 0, adică NULL) marchează sfârşitul string-ului. De aceea, despre string în C se
spune că este un şir NULL terminat.
În fişierul antet string.h găsim definiţiile funcţiilor de lucru cu string-uri în C.

1 comentarii:

Anonim spunea...

hmm

Trimiteți un comentariu