ALTE DOCUMENTE
|
||||||||||
Operatii cu siruri de caractere tip C
Un sir de caractere tip C este un tablou unidimensional ale carui componente sunt caractere ASCII, la care ultimul caracter este '0'. Caracterul '0' este folosit in algoritmi pentru detectarea sfarsitului de sir. Bibliotecile standard C / C++ contin multe functii utile pentru lucrul cu caractere. Functiile urmatoare testeaza tipul unui caracter, cifra, litera, etc. Prototipurile lor se afla in biblioteca <ctype.h>.
Functie |
Descriere |
int isalnum (int c); |
Test daca un caracter este alfanumeric |
int isalpha (int c); |
Test daca un caracter este alfabetic |
int isdigit (int c); |
Test daca un caracter este o cifra zecimala |
int isxdigit(int c); |
Test daca un caracter este o cifra hexazecimala 737f55h |
int islower (int c); |
Test daca un caracter este litera mica |
int isupper (int c); |
Test daca un caracter este litera mare |
int isspace (int c); |
Test daca un caracter este spatiu (' ', 'n', 't') |
Functiile au un rezultat diferit de zero daca argumentul este conform descrierii functiei. Urmatoarele functii convertesc literele mari in litere mici si invers.
Functie |
Descriere |
int tolower(int c); |
Converteste in litere mici |
int toupper(int c); |
Converteste in litere mari |
Alte functii ce prelucreaza siruri de caractere sunt :
int atoi(char s[]);
double atof(char s[]);
long atol(char s[]);
care convertesc un sir de caractere intr-un numar intreg si respectiv real. Prototipurile acestor functii se afla in biblioteca <stdlib.h>.
O functie utila la prelucrarea sirurilor este strlen() ce da lungimea unui sir de caractere, fara caracterul '0' terminal. Prototipul acestei functii este
int strlen(char[]);
si este definit in biblioteca <string.h>.
Functia
int strcmp(const char s1[], const char s2[]);
compara doua siruri, s1 si s2, caracter cu caracter, pana la primul caracter diferit. Rezultatul este un numar < 0, = 0, sau > 0, dupa cum sunt caracterele diferite comparate. Exemple de utilizare a functiei strcmp sunt prezentate in tabelul de mai jos
strcmp("abc", "bcd") |
< 0 |
'a' < 'b' |
strcmp("xyz", "xyz") |
Sirurile sunt egale |
|
strcmp("abcd", "abc") |
> 0 |
sirul "abcd" este mai lung |
Prototipul acestei functii se gaseste in biblioteca <string.h>.
Probleme rezolvate
Problema Se da sirul de caractere "aBxE12+? tnY". Sa se calculeze numarul de cifre, litere, spatii si caractere alfanumerice. Datele se vor afisa in felul urmator
Sirul studiat :
Lungimea sirului :
Litere :
Cifre :
Spatii :
Caractere alfanumerice :
Indicatie. Functiile standard ce se pot utiliza sunt
int isalpha(int) ;
int isdigit(int) ;
int isalnum(int) ;
int isspace(int) ;
din biblioteca <ctype.h> si functia
int strlen(char *) ;
din biblioteca <string.h>
Programul ce rezolva problema este urmatorul.
# include <iostream.h>
# include <string.h>
# include <ctype.h>
int main()
cout << 'Sirul studiat : ' << x << endl;
cout << 'Lungimea sirului : ' << strlen(x) << endl;
cout << 'Cifre : ' << nc << endl;
cout << 'Litere : ' << nl << endl;
cout << 'Spatii : ' << ns << endl;
return 0;
Rezultatele rularii programului sunt cele de mai jos.
Nota. Se vor adauga instructiunile necesare pentru numararea caracterelor alfanumerice (litere si cifre).
Problema Fie sirul "abca?aXZ". Sa se numere cate caractere 'a' sunt in sir.
Indicatie. Se va analiza intr-un ciclu fiecare caracter din sir. Programul de rezolvare a problemei este cel de mai jos.
# include <stdio.h>
# include <string.h>
int main()
Rezultatul rularii programului este cel de mai jos.
Problema Se da sirul "abcd=ABCD". Sa se defineasca o functie care sa converteasca literele mici in litere mari.
Indicatie.Se va utiliza functia standard
int toupper(char)
din biblioteca <ctype.h> sau <stdlib.h>
Programul de rezolvare a problemei este urmatorul.
# include <stdio.h>
# include <ctype.h>
# include <string.h>
void strcnv(char x[])
//testarea functiei strcnv
int main()
Rezultatul rularii programului este cel de mai jos.
Problema Se dau sirurile x = "+123" si y = "12.3e-1". Sa se converteasca valorile acestor siruri in numerele corespunzatoare care se vor atribui ca valori unor variabile de tip int si double, respectiv a si b. Sa se calculeze apoi valoarea expresiilor a + b, , sin(a + 2b), b + cos(a).
Se vor utiliza functiile standard
double atof(char *)
int atoi(char *)
long atol(char*)
din biblioteca <stdlib.h> . Programul este prezentat in continuare.
# include <iostream.h>
# include <stdlib.h>
# include <math.h>
int main()
Rezultatele rularii programului sunt cele de mai jos
Nota. Se vor adauga instructiunile necesare pentru calculul expresiilor si b + cos(a).
Problema Fie sirurile de caractere "-12", si "1.25e1". Sa se converteasca in numerele intregi si reale corespunzatoare cu functiile
int atoi(char * s);
double atof(char * s);
Prototipurile acestor functii se afla in biblioteca <stdlib.h>. Programul de rezolvare a problemei este urmatorul.
# include <stdio.h>
# include <stdlib.h>
int main()
Rezultatul rularii programului este cel de mai jos
Probleme propuse
Problema Se da sirul "xyz2j7M=*&^". Sa se copieze primele doua caractere din sirul "abc" in sirul dat.
Problema Sa se compare sirurile
"abcxd" si "abdf89k".
"xyz" si adk"
"mnp" si "mnp"
Se va explica de fiecare data rezultatul.
Indicatie. Se va utiliza functia standard
int strcmp(char * s1, char * s2)
din biblioteca <string.h>
Problema Sa se scrie o functie cu un parametru n de tip intreg care afiseaza n linii cu caracterul '*', un caracter pe prima linie, doua caractere pe linia a doua, n caractere pe linia n. De exemplu, pentru n = 3 rezultatul functiei va fi
*
**
***
Prototipul functiei va fi
void print(int n);
Problema Sa se construiasca o functie care sa transforme literele mari dintr-un sir de caractere in litere mici. Prototipul functiei va fi
void strcnv2(char[] x);
Problema Sa se defineasca o functie cu un parametru n de tip intreg care afisaza n linii de cate cinci caractere, caracterele abcde pe prima linie, caracterele bcdef pe linia a doua, etc. De exemplu, pentru n = 4 rezultatul functiei va fi
abcde
bcdef
cdefg
defgh
Prototipul functiei va fi
void prtcar(int n) ;
Problema Sa se faca un program care sa citeasca un sir de la tastatura si sa afiseze sirul citit si apoi sirul in ordine inversa.
Problema 7. Sa se citeasca un sir de caractere de la tastatura si sa se afiseze pe ecran fiecare caracter al sirului impreuna cu valoarea sa in codul ASCII.
Problema 8. Sa se citesca de la tastatura un sir ce contine litere si cifre. Sa se afisaze pe ecran doar litere continute in sir.
Problema 9. Sa se scrie o functie care sa calculeze lungimea unui sir de caractere. Prototipul functiei va fi
int Strlen(char x[]) ;
Problema 10. Sa se codifice un sir de caractere adaugand valoarea 1 la codul ASCII al fiecarui caracter. Sa se decodifice apoi sirul de caractere. Se vor afisa pe ecran sirul initial, sirul codificat si cel decodificat.
|