Functii pentru caractere si functii pentru siruri de caractere

27
Functii pentru caractere si functii pentru siruri de caractere

description

Functii pentru caractere si functii pentru siruri de caractere

Transcript of Functii pentru caractere si functii pentru siruri de caractere

  • Functii pentru caractere si functii pentru siruri de caractere

  • Funcii pentru caractere (ctype.h)

    10/30/[email protected]

  • Mulimea caracterelor

    10/30/[email protected]

    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

  • Caractere i codul ASCII

    10/30/[email protected]

    #include #include 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

    L => 76i => 105m => 109b => 98a => 97j => 106u => 117l => 108=> 32

    C => 67

  • Exemplu

    10/30/[email protected]

    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.

  • Funcii pentru clasificarea caracterelor

    10/30/[email protected]

    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

  • Funcii pentru clasificarea caracterelor

    10/30/[email protected]

    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

  • Funcii pentru clasificarea caracterelor

    10/30/[email protected]

    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

  • Funcii pentru clasificarea caracterelor

    10/30/[email protected]

    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

  • Exerciiu

    10/30/[email protected]

    program C care afieaz statistici despre un ir de caractere: numrul de caractere numrul de litere numrul de cifre

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

    cifre.

  • Funcii pentru conversia caracterelor

    10/30/[email protected]

    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('*') *

  • Funcii pentru conversia caracterelor

    10/30/[email protected]

    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', '+' '+'

  • Exerciiu

    10/30/[email protected]

    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.

  • Funcii pentru iruri de caractere

    10/30/[email protected]

  • Funcii pentru iruri de caractere

    10/30/[email protected]

    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

  • Funcii pentru iruri de caractere

    10/30/[email protected]

    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

  • Exemplu

    10/30/[email protected]

    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

  • Funcii pentru cutare n iruri de caractere

    10/30/[email protected]

    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

  • Exemplu

    10/30/[email protected]

    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.

  • Funcii pentru compararea irurilorde caractere

    10/30/[email protected]

    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

  • Funcii pentru compararea irurilorde caractere

    10/30/[email protected]

    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

  • Exemplu

    10/30/[email protected]

    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

  • Funcii pentru setarea irurilor de caractere

    10/30/[email protected]

    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

  • Exemplu

    10/30/[email protected]

    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

  • Funcii pentru copierea irurilor de caractere

    10/30/[email protected]

    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

  • Funcii pentru unirea irurilor de caractere

    10/30/[email protected]

    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

  • Exemplu

    10/30/[email protected]

    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

    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