CATEGORII DOCUMENTE |
Functii care lucreazǎ cu siruri de caractere
Pentru folosirea functiilor trebuie introdus fisierul antet string.h
Principalele prelucrari generale aplicate sirurilor de caractere:
obtinerea lungimii unui sir - strlen(sir) - string lengh;
copierea continutului unui sir sursa peste un sir destinatie, inlocuindu-l pe acesta - strcpy(destinatie, sursa) - string copy;
compararea a soua siruri a si b - strcmp(a,b) - string compare;
concatenarea a 2 siruri a si b prin lipirea sirului b la sfarsitul sirului a - strcat(a,b) - string concatenation;
initializarea unui sir de caractere cu acelasi caracter - strset(sir,ch);
inversarea continutului unui sir de caractere - strrev(sir) - string reverse;
transformarea literelor mari in litere mici sau invers - strlwr(sir) si strupr(sir) - string lower, string upper;
cautarea unui caracter intr-un sir dat - strchr(sir,ch) - string character;
cautarea unui subsir intr-un sir dat - strstr(sir,subsir) - string substring.
Forma generalǎ este: size_t strlen (char*);
unde: -size_t este un tip intreg, folosit in adresarea memoriei;
-argumentul este de tip char* (adicǎ un vector de caractere);
Programul de mai jos citeste un sir si afiseazǎ numǎrul de caractere pe care le are sirul citit (inclusiv caracterul NULL).
#include<iostream.h>
#include<string.h>
void main()
Fie programul urmator:
#include<fstream.h>
#include<iostream.h>
void main()
Programul echivalent cu ajutorul functiilor este urmatorul:
#include<fstream.h>
#include<iostream.h>
#include<string.h>
void main()
si are rolul de a copia sirul sursa la adresa dest. strcpy (sir1, sir2);
Copierea se terminǎ dupǎ ce a fost copiat caracterul NULL. Se returneazǎ adresa dest.
#include<iostream.h>
#include<string.h>
void main()
(copiere cu suprascriere)
Programul asigura interschimbul intre continutul a 2 siruri, fara functii:
#include<fstream.h>
#include<iostream.h>
void main()
Programul asigura interschimbul intre continutul a 2 siruri, cu ajutorul functiilor:
#include<fstream.h>
#include<iostream.h>
#include<string.h>
void main()
si rolul de a adǎuga sirul de caractere sursa la sirul dest. strcat (sir1, sir2);
Rezultatul este adresa sirului sursa iar sirul rezultat va avea ca lungime suma lungimilor celor douǎ siruri. Aceastǎ operatie se numeste concatenare.
#include<iostream.h>
#include<string.h>
void main()
Programul va realiza concatenarea prin adaugarea, caracter cu caracter, la sfarsitul primului sir a, pe cel de-al doilea, b.
#include<fstream.h>
#include<iostream.h>
void main()
Program foloseste functia strcat, fara a mai fi nevoie de calcule explicite ale lungimilor celor 2 siruri, in variabilele m si n.
#include<fstream.h>
#include<iostream.h>
#include<string.h>
void main()
strncat - are forma generala:
char *strncat(char* dest, const char* sursa, size_t nr); si are acelasi rol ca strcat cu deosebirea cǎ adaugǎ sirului destinatie primii nr octeti ai sirului sursǎ
strncat (sir1, sir2, nr);
Adǎugarea caracterelor se face inaintea caracterului NULL. Functia returneazǎ adresa de inceput a sirului destinatie.
#include<iostream.h>
#include<string.h>
void main()
strchr are forma generalǎ: char *strchr(char* s, int c); si are rolul de a cǎuta caracterul c in sirul s sir3 = strchr (sir1, caract);
Cǎutarea se face de la stanga la dreapta. In cazul in care a fost gǎsit caracterul cǎutat, functia intoarce adresa subsirului care incepe cu prima aparitie a caracterului citit si se terminǎ cu caracterul NULL al sirului in care se face cǎutarea. Altfel intoarce o expresie de tip *char cu valoarea 0.
#include<iostream.h>
#include<string.h>
void main()
Dacǎ ne intereseazǎ indicele in cadrul vectorului al caracterului cǎutat, determinǎm diferenta intre 2 valori de tipul *char.
#include<iostream.h>
#include<string.h>
void main()
In programul urmǎtor se citeste un sir si un caracter. Dacǎ acesta este gǎsit in sir se tipǎreste indicele primei aparitii a caracterului, altfel programul semnaleazǎ faptul cǎ acest caracter nu este continut in sir.
#include<iostream.h>
#include<string.h>
void main()
Exercitiu:Se considera citit de la tastatura un sir de caractere. Sa se afiseze de cate ori apare in sir vocala 'a'.
Primul program va realizarea cautarea vocalei si numararea aparitiilor in mod explicit, caracter cu caracter.
#include<iostream.h>
void main()
Al doilea program foloseste functia strchr.
#include<iostream.h>
#include<string.h>
void main()
//pentru gasirea urmatoarelor caractere
cout<<'sirul contine caracterul a de '<<nr<<' ori';
strrchr are forma generalǎ: char *strrchr(const char* s, int c); si are acelasi rol cu strchr cu doesebirea cǎ returneazǎ adresa ultimei aparitii a caracterului (cǎutarea se face de la dreapta cǎtre stanga). Ea este utilizatǎ in ipoteza cǎ se cautǎ ultima aparitie a unui caracter in sir. sir3 = strrchr (sir1, caract);
strcmp are forma generalǎ: int strcmp(const char *s1, const char *s2); si are rolul de a compara 2 siruri de caractere. Valoarea returnatǎ este:
Mecanismul prin care se comparǎ sirurile este:
Fiecare caracter este reprezentat in memorie printr-un cod ASCII. Ex: 'A'=65, 'B'=66, 'C'=67, 'a'=97, 'b'=98 etc; diferenta intre codul ASCII al oricarei litere mici si codul literei mari pereche este aceeasi: 32.
ex. char c1='D', c2; sau char c1='D',c2;
int i=c1+32; c2=c1+32;
c2=i; //realizeaza conversia cout<<c2;
cout<<c2; // inversa de la intreg la caracter
Transformarea literelor mari in litere mici
#include<iostream.h>
#include<string.h>
void main()
Transformarea literelor mici in litere mari
#include<iostream.h>
#include<string.h>
void main()
Functia strcmp nu face distinctie intre litere mari si mici;
Fie m numǎrul de caractere ale sirului s1 si n numǎrul de caractere ale sirului s2. Sǎ presupunem cǎ primele i caractere ale lui s1 coincid cu primele i caractere ale lui s2.
Dacǎ codul caracterului i+1 al sirului s1 este mai mare decat codul caracterului i+1 din sirul s2, avem s1>s2, s.a.m.d.
#include<iostream.h>
#include<string.h>
void main()
#include<iostream.h>
#include<string.h>
void main()
do
}while(gasit);
for(i=0;i<=n;i++) cout<<cuvinte[i]<<endl;
Programul urmator determina, fara functii daca 2 siruri au lungimi diferite sau egale. Pentru lungimi diferite sirurile isi schimba intre ele continutul.
#include<fstream.h>
#include<iostream.h>
void main()
if(a[m]&&b[n]&&a[m]>b[n]) i=1;
else if(a[m]) i=-1;
if(i==-1)
else if(i==0) cout<<'siruri egale';
else
f.close();
cout<<a<<' '<<b;}
Rezolvarea cu ajutorul functiilor:
#include<fstream.h>
#include<iostream.h>
#include<string.h>
void main()
else if(strcmp(a,b)==0) cout<<'siruri egale ';
else
f.close();
cout<<a<<' '<<b;}
strncmp are forma generalǎ: int strncmp(const char *s1, const char *s2, nr_caracter); si are rolul de a compara primele nr_caracter caractere din ambele siruri de caractere. Valoarea returnatǎ este asemanatoare ca la functia strcmp.
Functiile strcmp si strncmp fac deosebirea intre litere mari si litere mici, atunci cand se compara litera cu litera.
functiile stricmp si strnicmp nu fac deosebirea intre litere mari si litere mici:
stricmp (sir1, sir2);
strnicmp (sir1, sir2, nr_caracter);
functiile strlwr si strupr transforma toate caracterele dintr-un sir in litera mare/mica.
#include<iostream.h>
#include<string.h>
void main()
functia strstr afiseaza de cate ori apare intr-un sir un subsir citit de la tastatura:
#include<iostream.h>
#include<string.h>
void main()
cout<<'nsubsirul '<<ss<<' apare de ';
cout<<nr<<' ori in '<<sir;}
functiile atoi, atol, atof - din biblioteca de functii stdlib - transforma un sir in numar
nr=atol ( sir ); converteste un sir intr-un numar de tip long (intreg lung) - array to long
nr=atoi (sir); transforma un sir intr-un numar intreg - array to integer
nr=atof (sir); transforma un sir intr-un numar real - array to float
#include<iostream.h>
#include<stdlib.h>
void main()
//tipul long poate memora valori mai mari de 65520
functiile itoa(nr, sir, baza); ltoa(nr, sir, baza); transforma un numar intreg dat prin parametrul nr scris in baza "baza" in sirul de caractere aferent.
char s1[10], s2[10];
itoa (-25,s1,10);
ltoa(-68300,s2,10);
cout<<s1<<s2;
Tablouri de siruri de caractere
Sirurile de caractere se pot constitui ca elemente ale unui tablou. Acest tablu nu trebuie, insa, parcurs caracter cu caracter pentru a fi prelucrat. El beneficiaza de calitatea de sir a fiecarei linii, a.i. prelucrarea lui se va face global pentru fiecare linie in parte.
Programul urmator citeste un numar intre 1 si 12 si afiseaza numele lunii corespunzatoare din an.
#include<iostream.h>
void main()
unsigned nr; char c;
do
while(nr<1||nr>12);
cout<<' este luna '<< a[nr-1]<<endl;
Dandu-se lista numelor celor maxim 30 de elevi ai unei clase, sa se obtina lista numelor lor ordonata alfabetic.
#include<iostream.h>
#include<string.h>
void main()
n--;
}while(!ok);
cout<<'nLista numelor ordonate alfabetic: '<<endl;
for(i=0;i<m;i++) cout<<elevi[i]<<endl;}
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1601
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved