curs10-pc
DESCRIPTION
ProgramareacalculatoarelorTRANSCRIPT
-
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 Exemplu 1: #include #include int main() { char sir1[] = "abcd", sir2[] = "abcde"; 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