Sunteți pe pagina 1din 27

Functii pentru caractere si functii

pentru siruri de caractere

Funcii pentru caractere (ctype.h)

ebautu@univ-ovidius.ro

10/30/2012

Mulimea caracterelor
un caracter are tipul char
litere (mici i mari din alfabetul englez)
cifre (de la 0 la 9)
caractere de spaiere (spatiu, tab, enter, etc.)
caractere speciale ( [ { \ # ~ | % ^ ? etc.)
alte caractere ( @ ` $ etc.)

un ir de caractere are tipul char[] sau char*


o secven de caractere scrise ntre ghilimele

ebautu@univ-ovidius.ro

10/30/2012

Caractere i codul ASCII


#include <stdio.h>
#include <stdlib.h>
int main()
{
int i; char t[] = "Limbajul C";
for(i=0; t[i] != 0; ++i)
printf("%c => %i\n",t[i],t[i]);
system("pause");
}
http://ro.wikipedia.org/wiki/ASCII
4

ebautu@univ-ovidius.ro

L => 76
i => 105
m => 109
b => 98
a => 97
j => 106
u => 117
l => 108
=> 32
C => 67
10/30/2012

Exemplu
Program C care
citete un ir de caractere t
citete un caracter x
citete un caracter y
nlocuiete n t apariiile lui x cu y.
pentru t = Limbajul C are functii, x = C i y = B
se afieaz: Limbajul B are functii.

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru clasificarea


caracterelor
sunt definite n biblioteca ctype.h
au denumiri de forma isXYZ
XYZ este numele clasei de caractere: lower, upper,

digit, etc.
au un singur parametru de tip char
rezultatul este adevrat dac parametrul face

parte din clasa XYZ a funciei


exemplu:
islower('-'), islower('1'), islower('A') fals
islower('x') adevrat
6

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru clasificarea


caracterelor
int isalpha (int c)
testeaz dac c este o liter
'A', 'b', 'z' adevrat; '!', '@', '-' fals

int islower (int c)


testeaz dac c este o minuscul
'a', 'q', 's' adevrat; 'A', ')', '@' false

int isupper (int c)


testeaz dac c este o majuscul
'A', 'Q', 'S' adevrat; 'a', ')', '@' false

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru clasificarea


caracterelor
int isdigit (int c)
testeaz dac c este o cifr n baza 10
'0', '4', '9' adevrat; 'A', 'X', '-' fals

int isxdigit (int c)


testeaz dac c este o cifr n baza 16
'0', '4', 'A', 'f' adevrat; 'g', 'X', '-' fals

int isalnum (int c)


testeaz dac c este liter sau cifr n baza 10
'0', '4', 'A', 'q' adevrat; '@', '!', '.' fals

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru clasificarea


caracterelor
int isblank (int c)
testeaz dac c este caracter spaiu sau tab
' ', '\t' adevrat; '_', '.', 'a' fals

int isspace (int c)


testeaz dac c este caracter de spaiere
' ', '\t', '\n' adevrat; '_', '.', 'a' fals

int ispunct (int c)


testeaz dac c este caracter de punctuaie
',', '.', '!' adevrat; 'a', 'Q' fals

alte funcii: isprint, iscntrl, isgraph, etc


9

ebautu@univ-ovidius.ro

10/30/2012

Exerciiu
program C care afieaz statistici despre un ir

de caractere:
numrul de caractere
numrul de litere
numrul de cifre

10

pentru:
Limbajul C are multe functii.
se afieaz:
Textul contine 29 caractere din care 24 litere si 0
cifre.

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru conversia caracterelor


sunt definite n biblioteca ctype.h
au denumiri de forma toXYZ
XYZ este numele clasei de caractere: lower, upper

au un singur parametru de tip char


rezultatul este forma modificat a parametrului

(conform clasei XYZ)


exemplu:
tolower('A') a
tolower('*') *

11

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru conversia caracterelor


int tolower (int c)
testeaz dac c este majuscul i returneaz

minuscula corespunztoare
'A' 'a', 'b' 'b', '+' '+'
int toupper (int c)
testeaz dac c este minuscul i returneaz

majuscula corespunztoare
'a' 'A', 'B' 'B', '+' '+'

12

ebautu@univ-ovidius.ro

10/30/2012

Exerciiu
Program C care citete un ir de caractere i l

transform astfel:
prima liter devine majuscul
prima liter de dup fiecare spaiu sau semn de

punctuaie devine majuscul


restul literelor devin minuscule
pentru:
Limbajul C are functii. chiar si pentru caractere.
se afieaz:
Limbajul C Are Functii. Chiar Si Pentru Caractere.

13

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru iruri de caractere

14

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru iruri de caractere


sunt definite n biblioteca string.h
au denumiri de forma strXYZ
XYZ este numele o abreviere a rolului funciei

primul parametrul este de tipul char*


char* este similar cu char[], dar variabile de tip

char* pot s fie modificate (char *t; t = Salut)


rezultatul este n general char*
exemplu:
strlwr(ABC) abc
strlen(ABC) 3
15

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru iruri de caractere


int strlen(char *sir)
calculeaz lungimea irului de caractere
strlen(Limbajul C) 10

char* strlwr(char *sir)


transform majusculele n minuscule
strlwr(Ab2) ab2

char* strupr(char *sir)


transform minuscule n majusculele
strupr(Ab2) AB2

char* strrev(char *sir)


inverseaz irul (va fi scris de la coada la cap)
strrev(Ab2) 2bA
16

ebautu@univ-ovidius.ro

10/30/2012

Exemplu
Program C care citete de la tastatur un ir de

caractere, l inverseaz i afiseaz rezultatul.


pentru:
Limbajul C are functii.
afieaz:
.iitcnuf era C lujabmiL

17

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru cutare n iruri de


caractere
rezultatul este subirul unde a fost gsit ce se

caut sau NULL dac nu a fost gsit


char* strchr(char *src, int c)
caut prima apariie n irul src a caracterului c
strchr(Programare, a) amare

char* strrchr(char *src, int c)


caut ultima apariie n irul src a caracterului c
strrchr(Programare, a) are

char* strstr(char *src, char *sub)


caut prima apariie n irul src a subirului sub
strstr(Programare, ac) NULL
18

ebautu@univ-ovidius.ro

10/30/2012

Exemplu
Program C care
citete un text X
citete un text Y
spune dac Y apare n interiorul lui X
pentru: X = Limbajul C are functii. i Y = are
afieaz
Textul are a fost gasit.

19

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru compararea irurilor


de caractere
Rezultatul este
0 dac irurile src1 i src2 sunt egale
negativ dac src1 este mai mic dect src2
pozitiv dac src1 este mai mare dect src2
Majusculele sunt considerate mai mici dect minusculele.

i = ignor diferenele ntre majuscule i minuscule


n = compar doar primele n caractere

20

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru compararea irurilor


de caractere
int strcmp(char *src1, char *src2)
strcmp(AC, ab) -1

int stricmp(char *src1, char *src2)


stricmp(AC, ab) 1

int strncmp(char *src1, char *src2, int n)


strncmp(AC, ab, 1) -1

int strnicmp(char *src1, char *src2, int n)


strnicmp(AC, ab, 1) 0

21

ebautu@univ-ovidius.ro

10/30/2012

Exemplu
Program C care
citete dou iruri de caractere X i Y
irul mai mic este transformat n minuscule
irul mai mare este transformat n majuscule
dac irurile sunt identice, nici unul nu se modific
pentru X = Limbajul C, Y = Programarea

calculatoarelor
afieaz:
X = limbajul c
Y = PROGRAMAREA CALCULATOARELOR

22

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru setarea irurilor de


caractere
char* strset(char *dest, int c)
scrie caracterul c n fiecare poziie din irul dest
char t[] = Limbajul C;

strset(t, x); t devine xxxxxxxxxx


char* strnset(char *dest, int c, int n)
scrie caracterul c n fiecare poziie din irul dest de

cel mult n ori


char t[] = Limbajul C;
strnset(t, x, 5); t devine xxxxxjul C

23

ebautu@univ-ovidius.ro

10/30/2012

Exemplu
Program C care
citete un ir de caractere X
citete un ir de caractere Y
nlocuiete prima apariie a lui X n Y cu plusuri i

afieaz rezultatul
pentru X = aj i Y = Limbajul C
afieaz Limb++ul C

24

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru copierea irurilor de


caractere
char* strcpy(char *dest, char *src)
copiaz irul src n irul dest
char t[100];

strcpy(t, Limbajul C); t devine Limbajul C


char* strncpy(char *dest, char *src, int n)
copiaz cel mult n caractered din irul src n irul

dest
char t[100];
strncpy(t, Limbajul C, 5); t devine Limba

25

ebautu@univ-ovidius.ro

10/30/2012

Funcii pentru unirea irurilor de


caractere
char* strcat(char *dest, char *src)
adaug irul src la sfritul irului dest
char t[100] = Limbajul;

strcat(t, C); t devine Limbajul C


char* strncat(char *dest, char *src, int n)
adaug cel mult n caractere din irul src la sfritul

irului dest
char t[100] = Limbajul;
strncat(t, C++, 2); t devine Limbajul C

26

ebautu@univ-ovidius.ro

10/30/2012

Exemplu
Program C care
citete un ir de caractere X
afieaz Mesajul X citit pe dos este Y
Y este inversul lui X
repet operaiile pn cnd X i Y sunt egale

27

Sirul X:Limbaj
Limbaj citit de dos este jabmiL
Sirul X:carte
carte citit de dos este etrac
Sirul X:ana
ana citit de dos este ana

ebautu@univ-ovidius.ro

10/30/2012