1. Folosind faptul ca diferenta dintre codul ASCII al
literelor mari si codul ASCII este de 32. Ex: A=65; a=97 cin.get(s,256); for(i=0;i<strlen(s);i++) if(s[i]>=A&&s[i]<=Z) s[i]=s[i]+32; cout<<s; return0; 2.Utilizand functiile toupper(caracter) => se gasesc in fisierul heaer ctype.h tolower(caracter) Ex: for(i=0;i<strlen(s);i++) if(s[i]>=a&&s[i]<=z) s[i]=toupper(s[i]); strupr=>transforma literele mici din sirul dat ca parametru in litere mari; strlwr=>transforma literele mar din sirul dat ca parametru in litere mici; Ex: cin.get(sir,256); strupr(sir); cout<<sir; Inversarea unui sir de carctere 1.Parcurgerea sirului dat in ordine inversa , construirea glinditului acestuia si compararea celor doua siruri. 2.Folosirea functiei strrev(sir); Sirul obtinut in urma aplicarii functiei este memorat tot in parametrul sir deci valoarea initiala a sirului se pierde. Ex:cin.get(s,256); strcpy(s1,s); strrev(s1); if(strcmp(s,s1)==0) cout<<palindrom; else cout<<nu e palindrom:; Cautarea unui carcter intr-un sir 1.Clasic cu cautare secventiala. 2.Folosind functiile: strchr(sir,carcter); Functia va returna un pointer catre prima aparitie a caracterului in sir. Daca caracterul nu apare in sir atunci functia va returna caracterul nul. strrchr(sir,carcter) Functia va returna un pointer catre ultima aparitie a carcaterului in sir. Aplicatie:
1.Fiind dat un sir de carctere de maxim 25 de carctere si un
carcter c sa se determine numarul de aparitii al carcterului c in sir. #include <iostream> #include <string.h> using namespace std; int main() {chars[26],c,*p; int i,nr=0; cin.get(s,26); cin>>c; p=strchr(s,c); while(p!=NULL) {nr++; p=strchr(p+1,c);} cout<<nr++; return 0;} Cautarea unui subsir intr-un sir
Se realizeaza cu ajutorul functiei strstr(sir,subsir).
Functia returneaza un pointer catre prima aparitie a subsirului in sir. Aplicatii 1.Se citeste de la tastatura un cuvant cu 25 carcatere , litere mari si litere mici ale alfabetului englez. Sa se inlocuiasca vocalele din sir cu carcterul *. #include <iostream> #include <string.h> using namespace std; int main() {char s[26],voc[]=aeiouAEIOU; int i; cin.get(s,26); for(i=0;i<strlen(s);i++) if(strchr(voc,s[i]!=NULL) s[i]=*; cout<<s; return0; 2.Scrieti un program care citeste de la tastatura un sire de carctere cu maxim 30 de carctere si construieste toate prefixele ascestui cuvant. #include <iostream> #include <string.h> using namespace std; int main() {char s[31]; int i,j; cin.get(s,31); for(i=0;i<strlen(s);i++) {for(j=0;j<=i;j++) cout<<s[j]; cout<<endl; return 0; Extragerea unui cuvant intr-un text Se utilizeaza functia strtok(text,sir_delimitatori), unde sir_delimitatori contine delimitatori ce despart entitatile din text. Functia va returna un pointer catre adresa entitatii extrase. Pentru a putea continua extragera de cuvinte din text functia se apeleaza sub forma strtok[NULL,sir_delimitatori). Aplicatii 1. Se citeste de la tastatura un text cu o lungime de maxim 300 caractere in care cuvintele pot fi separate prin virgula, spatii sau punct.Sa se afiseje cuvintele din text unele sub altele si sa se determine numarul acestora. ...................................... {char t[301],s[]= , .*p; int nr=0; cin.get(t,301); p=strtok(t,s); while(p) { cout<<p<<endl; nr++; p=strtok(NULL,s);} cout<<nr; retun0; 2.Secventa urmatoare memoreaza un sir de carctere, in urma executarii ei s-a afisat p*r*o*b*a***e* stabiliti care este sirul de carctere memorat initial in variabila s. for(i=0;i<strlen(s);i++) cout<<s[i]<<*; Sirul de cartere memorat initial este proba*e 3. Care va fi irul de caractere afiat dup executarea secvenei alturate , n care variabila s memoreaz un ir cu cel mult 5 caractere? char s[]=raton; s[1]=s[3]; cout<<s Se va afisa : roton 4. Care va fi irul de caractere afiat pe ecran dup executarea secvenei alturate, n care variabila s memoreaz un ir cu cel mult 4 caractere, iar variabila t un caracter? char s[]=arac; t=s[1]; s[1]=s[3]; s[3]=t; cout<<s; Se va afisa :acar 5. Care din urmtoarele expresii are valoarea 1 dac i numai dac irul de caractere s, de lungime 10, este obinut prin concatenarea a dou iruri identice? a. strcmp(s,s+5)==0 b. s==strstr(s,s+5) c. s==s+5 d.strcmp(s,strcat(s+5)==0 => b. s==strstr(s,s+5) Functii utile in prelucrarea sirurior de carctere Functia strspn(s1,s2)=> furnizeaza ca rezultat numarul de caractere consecutive din sirul s1 (incepand cu primul caracter) care se gaseste printre caracerele sirului s2.
Functia strcspn(s1,s2)=>furnizeaza ca rezultat numarul de
carctere consecutive din sirul s1 (incepand cu primul carcater ), care nu se gasesc printre caracterele din sirul s2.
Functia strpbrk(s1,s2)=>furnizeaza ca rezultat un pointer
catre primul carcter din sirul s1 care se gaseste si in sirul s2, daca nici un carcter din sirul s1 nu se gaseste printre caracterele sirului s2 , functia furnizeaza ca rezultat adresa nula. Conversia unui sir de carctere intr-un numar
Functia atoi()=>tip rezultat int=>S.A. atoi(sir)=>converteste
sirul de carcatere sir intr-o valoare numerica intrega.
Functia atol()=>tip rezultat long=>S.A.
atol(sir)=>converteste sirul de carctere sir intr-o valoare numerica intreaga de tip long.
Functia atof()=>tip rezultat double =>S.A.
atof(sir)=>converteste sirul de caractere sir intr-o valoare numerica reala in virgula mobila dubla precizie
Functia _atold()=>tip rezultat long double=>S.A.
_atold(sir)=>converteste sirul de cactere sir intr-o valoare numaerica rela in virgula mobila dubla precizie , de tip long.
Functia strtol()=>tip rezultat long=>S.A.
strtol(sir,&p,b)=>converteste sirul de carcatere sir intr-o valoare numerica intreaga de tip long .Functiei i se furnizeaza baza de numeratie prin parametrul b.Functia furnizeaza pozitia primului carcter care nu poate fi convertit prin parametrul p.
Functia strtoul()=>tip rezultat unsigned long=>S.A.
strtol(sir,&p,b)=>converteste sirul de carcatere sir intr-o valoare numerica intreaga fara semn de tip long.Functiei i se furnizeaza baza de numeratie prin parametrul b.Functia furnizeaza pozitia primului caracter care nu poate fi convertit prin parametrul p.
Functia strtod ()=>tip rezultat double=>S.A.
strtod(sir,&p)=>converteste sirul de carctere sir intr-o valoare numerica reala in virgula mobila dubla precizie.Functia furnizeaza pozitia primului carcter care nu poate fi convertit prin parametrul p. Conversia unui numar in sir de caractere Functia itoa()=>tip numar int=?S.A. itoa(n,sir,b)=?converteste in sirul de caractere sir o valoare numerica intreaga n , exprimata in baza de numeratie b.
Functia ltoa()=>tip numar long=>S.A.
ltoa(n,sir,b)=>converteste in sirul de carcatre sir o valoare numerica intreaga de tip long n exprimata in baza de numeratie b.
Functia ultoa()=>tip numar unsigned long=>S.A.
ultoa(n,sir,b)=>converteste in sirul de carctere sir o valoare numerica intreaga fara semn , de tip long n , exprimata in baza de numeratie b.
Functia ecvt()=>tip numar double=>S.A.
ecvt(n,m,&p,&s)=>converteste intr-un sir de caractere o valoare numerica reala in virgula mobila dubla precizie n.Parametrul l precizeaza numarul de carctere ale sirului ; daca numarul are mai puteine cifre decat m , se va completa la dreapta cu carcterul cifra 0, pana se obtin cele m carctere.Functia furnizeaza prin numele ei adresa sirului de carctere prin parametrul p-pozitia punctului zecimal si prin parametru s semnul.
Functia fcvt()=>tip numar double=>S.A.
fcvt(n,m,&p,&s)=>converteste intr-un sir de carctere o valoare numerica reala in virgula mobila dubla precizie n, la fel ca functia ecvt()-cu deosebirea ca parametrul m precizeaza numarul de carctere ale partii zecilmale din sir;daca nr are mai putine cifre in partea fractionara decat m se fa completa la dreapta cu carcterul cifra 0-pana se obtin cele m carctere pentru partea fractionara.