Upload
dan-lepadatu
View
214
Download
1
Embed Size (px)
DESCRIPTION
Programareacalculatoarelor
Citation preview
Programarea calculatoarelor
Universitatea Constantin Brncui din Trgu-Jiu Facultatea de Inginerie
Departamentul de Automatic, Energie i Mediu
Lect. dr. Adrian Runceanu
Curs 10
13.11.2013 Programarea calculatoarelor 2
Capitolul 8. iruri de caractere
8.1. Form general. Declarare 8.2. Funcii specifice irurilor de caractere 8.3. Probleme cu iruri de caractere
13.11.2013 Programarea calculatoarelor 3
8.1. Form general. Declarare
Datele care se reprezint sub form se iruri de caractere au o larg aplicabilitate n programarea calculatoarelor, indiferent de limbajul folosit.
Astfel i n limbajul C/C++ se pot memora i prelucra informaii de tip ir de caractere.
Cu toate c limbajul C/C++ nu conine un tip de date special pentru iruri de caractere aa cum are limbajul Pascal, se pot utiliza tablouri unidimensionale de caractere.
13.11.2013 Programarea calculatoarelor 4
8.1. Form general. Declarare
Declararea unui tablou de caractere se face astfel:
13.11.2013 Programarea calculatoarelor 5
char nume_tablou[dimensiune_maxim];
Exemple:
char sir[20]; // tablou de 20 de caractere char t[10]; // tablou de 10 caractere
8.1. Form general. Declarare
Pentru a specifica sfritul irului de caractere, dup ultimul caracter se adaug un octet cu valoarea 0 ( caracterul '\0' ).
Dimensiunea declarat pentru un tablou de iruri de caractere trebuie s fie cu o unitate mai mare pentru ca pe ultima poziie s se poat pune i valoarea '\0' = terminatorul de ir.
13.11.2013 Programarea calculatoarelor 6
8.1. Form general. Declarare
Reprezentarea intern a unui ir de caractere
sir[0] sir[33]=Programarea calculatoarelor Ultimi octei sunt nefolosii.
13.11.2013 Programarea calculatoarelor 7
char sir[33]="Programarea calculatoarelor";
P r o g r a m a r e a c a l c u l a t o a r e l o r \0
8.1. Form general. Declarare
n limbajul C/C++, un ir de caractere este un tablou unidimensional cu elemente de tip caracter i care se termin cu NULL.
Totui compilatorul C/C++ nu adaug automat terminatorul NULL, dect n cazul folosirii funciilor predefinite fgets() i gets() (functii de citire din fisiere sau de la tastatura), iar n celelalte cazuri este necesar ca programatorul s adauge terminatorul de ir atunci cnd dorete acest lucru, pentru a lucra cu irurile de caractere.
13.11.2013 Programarea calculatoarelor 8
8.1. Form general. Declarare Exemplu: Urmtorul program declar un ir de caractere de 256 de
elemente i atribuie primelor 26 de locaii libere literele mari ale alfabetului:
#include int main() { char sir[256]; int i; for(i=0;i
Capitolul 8. iruri de caractere
8.1. Form general. Declarare 8.2. Funcii specifice irurilor de caractere 8.3. Probleme cu iruri de caractere
13.11.2013 Programarea calculatoarelor 10
8.2. Funcii specifice irurilor de caractere
n biblioteca limbajului C++ exist cteva funcii specifice irurilor de caractere: n fiierul standard de intrare / ieire
stdio.h, avem funciile gets() i puts(). n fiierul string.h, avem mai multe
funcii specifice prelucrrii irurilor, funcii pe care le voi prezenta n continuare.
13.11.2013 Programarea calculatoarelor 11
8.2. Funcii specifice irurilor de caractere
Pentru citirea sirurilor de caractere care contin spatii se poate folosi metoda getline a funciei cin:
Exemplu:
char variabila_sir[120];
cin.getline(variabila_sir, 120);
13.11.2013 Programarea calculatoarelor 12
cin.getline(variabila_sir, dimensiune_maxima);
8.2. Funcii specifice irurilor de caractere
Funciile pentru operaii cu iruri ce se gsesc n header-ul .
Returneaz un numr ntreg ce reprezint
lungimea unui ir de caractere, fr a numra terminatorul de ir.
Exemplu:
cout
8.2. Funcii specifice irurilor de caractere
Funcia compar cele dou iruri date ca
argument i returneaz o valoare ntreag egal cu diferena dintre codurile ASCII ale primelor caractere care nu coincid.
Exemplu:
cout
8.2. Funcii specifice irurilor de caractere
Funcia copiaz irul surs n irul destinaie. Nota: Pentru a fi posibil copierea, lungimea irului
destinaie trebuie s fie mai mare sau egal cu cea a irului surs, altfel pot aparea erori grave.
Exemplu:
char sir[20];
cout
8.2. Funcii specifice irurilor de caractere
Funcia concateneaz cele dou iruri: irul
surs este adugat la sfritul irului destinaie. Tabloul care conine irul destinaie trebuie s
aib suficiente elemente.
Exemplu:
char sir[]="carte";
cout
8.2. Funcii specifice irurilor de caractere
Returneaza o valoare pozitiva daca un caracter apare intr-un sir, 0 in caz contrar.
Exemplu:
char sir[]="exemplu de sir", c=i;
if (strchr(sir, c)) cout
8.2. Funcii specifice irurilor de caractere
Returneaza o valoare pozitiva daca un sir apare intr-un alt sir, 0 in caz contrar.
Exemplu:
char sir1="primul sir", sir2="sir";
if (strstr(sir1,sir2)) cout
8.2. Funcii specifice irurilor de caractere
cout
8.2. Funcii specifice irurilor de caractere
char str1[20]="hello"; char str2[20]="goodbye"; char str3[20]=""; int diferenta, lungime; cout
8.2. Funcii specifice irurilor de caractere
diferenta = strcmp(str1, str2); if (diferenta == 0) cout
8.2. Funcii specifice irurilor de caractere
cout
8.2. Funcii specifice irurilor de caractere
Executia programului:
13.11.2013 Programarea calculatoarelor 24
8.2. Funcii specifice irurilor de caractere
Exemplu 2: Verificati daca un nume apare intr-un sir. #include #include int main() { char nume[10],sir[100]; cout
8.2. Funcii specifice irurilor de caractere
cout
8.2. Funcii specifice irurilor de caractere
Executia programului:
13.11.2013 Programarea calculatoarelor 27
8.2. Funcii specifice irurilor de caractere
n fiierul exist cteva funcii
care prelucreaz irurile de caractere. Acestea sunt funciile de conversie dintr-un
numr ntr-un ir de caractere i invers.
13.11.2013 Programarea calculatoarelor 28
8.2. Funcii specifice irurilor de caractere
n programul urmtor vor fi exemplicate funciile de conversie iruri de caractere n numere:
13.11.2013 Programarea calculatoarelor 29
Funcie la ce folosete atof convertete un ir de caractere ntr-un numr real simpl precizie atoi convertete un ir de caractere ntr-un numr ntreg atol convertete un ir de caractere ntr-un numr ntreg de tip long strtod convertete un ir de caractere ntr-un numr real dubl precizie strtol convertete un ir de caractere ntr-un numr de tip long
8.2. Funcii specifice irurilor de caractere
#include #include int main() { int numar_int; float numar_real; long numar; numar_int = atoi("6789"); numar_real = atof("12.345"); numar = atol("1234567890L"); cout
8.2. Funcii specifice irurilor de caractere
n programul urmtor vor fi exemplicate funciile de conversie numere n iruri de caractere:
13.11.2013 Programarea calculatoarelor 31
Funcie la ce folosete itoa convertete un numr ntreg ntr-un ir de caractere ftoa convertete un numr real simpl precizie ntr-un ir de caractere ultoa convertete un numr de tip long unsigned ntr-un ir de caractere
8.2. Funcii specifice irurilor de caractere
#include #include int main() { int numar_int = 6789; long numar = 1234567890L; char sir[25]; itoa(numar_int, sir, 10); cout
8.2. Funcii specifice irurilor de caractere
Executia programului:
13.11.2013 Programarea calculatoarelor 33
Capitolul 8. iruri de caractere
8.1. Form general. Declarare 8.2. Funcii specifice irurilor de caractere 8.3. Probleme cu iruri de caractere
13.11.2013 Programarea calculatoarelor 34
8.3. Probleme cu iruri de caractere
Problema 1: Enun:
S se afieze numrul de vocale dintr-un text scris cu litere mici, memorat intr-o variabil de tip ir de caractere.
Exemplu:
Date de intrare: Programarea calculatoarelor
Date de ieire: Exista 12 vocale in text
13.11.2013 Programarea calculatoarelor 35
8.3. Probleme cu iruri de caractere
#include
#include
int main()
{
char text[100];
char vocale[] = "aeiou";
int contor = 0;
cout
8.3. Probleme cu iruri de caractere
for (int i=0; i
8.3. Probleme cu iruri de caractere
Problema 2:
Enun:
S se afieze cu litere mari un text dat, de maxim 255 caractere.
Exemplu:
Date de intrare text: liMBajUl c++
Date de ieire LIMBAJUL C++
13.11.2013 Programarea calculatoarelor 38
8.3. Probleme cu iruri de caractere #include
int main()
{
char sir[255];
cout
8.3. Probleme cu iruri de caractere
Problema 3: Enun:
Se citete un ir de caractere. S se afieze litera cea mai des ntlnit.
Exemplu:
Date de intrare text: carte de informatica si programare
Date de ieire: a apare de 5 ori
13.11.2013 Programarea calculatoarelor 40
8.3. Probleme cu iruri de caractere
#include
#include
int main()
{
char sir[1000], carac_max, c;
int i, frecv[256], max=0; // frecv - vector de frecvente
cout
8.3. Probleme cu iruri de caractere
for (i=0;imax){
max=frecv[c];
carac_max=c;
}
}
cout
8.3. Probleme cu iruri de caractere
13.11.2013 Programarea calculatoarelor 43
Probleme propuse spre rezolvate iruri de caractere
1. S se afieze toate prefixele i sufixele unui cuvnt citit de la tastatur. Exemplu: Date de intrare: informatica Date de ieire:
13.11.2013 Programarea calculatoarelor 44
i in inf info infor inform informa informat informati informatic informatica
a ca ica tica atica matica rmatica ormatica formatica nformatica informatica
Probleme propuse spre rezolvate iruri de caractere
2. Se citete de la tastatur un caracter c i un text de maxim 100 de carectere. Afiai de cte ori apare caracterul c n cadrul textului. Literele mari se vor considera diferite de literele mici. Exemplu: Date de intrare: Acesta este un simplu exemplu Caracterul e Date de ieire:
13.11.2013 Programarea calculatoarelor 45
Litera e apare de 5 ori
Probleme propuse spre rezolvate iruri de caractere
3. Se citete de la tastatur un ir de maxim 100 de carectere format numai din litere i cifre. Afiai numrul literelor mari, numrul literelor mici i numrul caracterelor de tip cifr din textul dat. Exemplu: Date de intrare: S-a nascut la Targu Jiu in 1968 pe 21 martie Date de ieire:
13.11.2013 Programarea calculatoarelor 46
Se gasesc 25 de litere mici, 2 litere mari si 6 cifre
ntrebri?
13.11.2013 Programarea calculatoarelor 47