Siruri de caractere

download Siruri de caractere

If you can't read please download the document

description

Lucrare scrisa despre folosirea siruruilor de caractere in C, C++

Transcript of Siruri de caractere

iruri de caractereUn ir de caractere se reine n memorie ca fiind un vector n care fiecare element este un caracter.De exemplu: char sir[100]; declar un ir de caractere Sfritul unui ir este marcat de un caracter null. Un null este specificat ca '\0' i are valoarea 0.Important: Dac irul reine n caractere, atunci trebuie alocat spaiu n vector pentru n+1 octei pentru c ultimul octet va avea valoarea 0.char sir[] = "caractere"; // n cazul acesta compilatorul va aloca numrul de octei necesariCitirea i afiarea irurilor de caracterePentru citirea unui ir de caractere se poate folosi gets sau scanf("%s",...).! Care este diferena dintre scanf i gets?Pentru a afia un ir de caractere se folosete puts sau printf("%s",...)! Care este diferena dintre puts i printf?char v[100] = "Andreea";puts(v); // va afia Andreeachar v[100] = "A venit luna ianuarie";puts(v); // Va afia A venit luna ianuarieiruri de caractere vs pointeriComponentele unui ir memorat pot fi accesate la fel cum se acceseaz componentele unui vector:1) char sir[100] = "Mara";printf("%c", sir[0]); // va afia Msir[3] = 'i';printf("%s", sir); // va afia Mari2)char *sir = "Mara";printf("%c", sir[0]); // va afia Msir[3] = 'i'; // eroare pentru c sir este read-only ! Atenie la:Dac avem un ir sir declarat astfel:char sir[10] = "Mara";printf("%s", sir + 1); // va afia ara Explicaie: sir este un pointer c tre prima component. sir + 1 este un pointer ctre a doua component i va afia irul care ncepe cu acea component.printf("%c", *(sir+2)); // va afia r. sir este un pointer ctre prima component, sir + 2 este un pointer ctre a treia component, iar *(sir+2) este coninutul pointerului.*(sir+2) = 0;puts(sir); // va afia MaFuncii din limbajul C care lucreaz cu iruri de caractereFunciile pentru lucrul cu caractere se afl n fiierul antet string.h1. strlen(const char *) - are rolul de a returna lungimea efectiv a unui ir (n calcul cruia nu intr caracterul null)char sir[100] = "Mara";printf("%d", strlen(sir)); // va afisa 42. Funcia strcpy.strcpy(char *dest, char *sursa) - are rolul de a copia irul de adres sursa la destinaia dest. Copierea se termin dup ce a fost copiat caracterul null. Se returneaz adresa dest.char sir1[100] = "Acesta este";char sir2[100] = "alt sir";strcpy(sir1, sir2);puts(sir1); // va afia alt sir3. Funcia strcatstrcat(char * dest, char *sursa) - are rolul de a aduga irului de adres dest irul de adres sursa. irul de adres sursa rmne nemodificat. Operaia se numete concatenare i nu este comutativ. Rezultatul este adresa irului dest, iar irul va avea ca lungime, suma lungimile celor dou iruri care au fost concatenate.char sir1[100] = "Acesta este";char sir2[100] = "alt sir";strcat(sir1, sir2);puts(sir1); // va afia Acesta este alt sirfuncia strncat(char *dest, char *sursa, size_t nr) - are acelai rol ca i strcat cu deosebirea c adaug irului destinaie primii nr octei ai irului surs. 4. Funcia strchrstrchr(char *s, int c) - are rolul de a cuta caracterul c n irul s. Cutarea se face de la stnga la dreapta. n cazul n care caracterul este gsit funcia ntoarce adresa subirului care ncepe cu prima apariie a caracterului citit. Altfel, ntoarce o expresie de tip char * cu valoarea 0. char sir[20] = "Aceasta este";Se poate afia indicele primei apariii a caracterului 't': strchr(a,'t') - a5. Funcia strcmp (char *s1, char*s2) are rolul de a compara lexicografic dou iruri de caractere. Valoarea returnat:< 0 dac s1;s2= 0 dac s1 = s2> 0 dac s1 > s26. Funcia strstr (char *s1, char *s2) verfic dac s2 se gsete n irul s1. Dac se gsete, atunci funcia returneaz adresa de nceput n cadrul irului s1, altfel returneaz adresa 0.7. Funcia strtok(char *s1, char *s2). primul apel al funciei strtok (s1, s2)urmtoarele apeluri (NULL, s2)Funcii pentru iruri de caractere:strcpy(s1,s2) - copiaz s1 n s2strcat(s1,s2) - concateneaz s2 la sfritul lui s1strlen(s1) - returneaz lungimea lui s1strcmp(s1,s2) - returneaz 0 dac s1 i s2 sunt identice; mai mic dect 0 dac s1 < s2; mai mare ca 0 dac s1 > s2strchr(s1,ch) - returneaz un pointer la prima apariie a lui ch n s1strstr(s1,s2) - returneaz un pointer la prima apariie a lui s2 n s1Probleme.1. Se citesc n cuvinte. S se sorteze n ordine descresctoare.2. Se citete un ir de caractere i un caracter. S se afieze indici tuturor apariiilor caracterului citit n ir.3. Se cere ca dintr-un ir dat s se elimine toate apariiile unui subir, de asemenea, dat.4. Se citete de la tastatur un text. Cuvintele se consider separate prin virgul, spaiu sau punct. Cte cuvinte aare textul citit?5. Se citete de la tastatur un text i o succesiune de caractere. De cte ori ntlnim aceast succesiune n cadrul textului?6. se citete un text. Dou cuvinte pot si separate printr-unul sau mai multe spaii. Se cere s se elimine spaiile inutile.