Siruri de Caractere in C si C++

Curs
9.7/10 (6 voturi)
Domeniu: Calculatoare
Conține 1 fișier: doc
Pagini : 8 în total
Cuvinte : 2907
Mărime: 19.61KB (arhivat)
Cost: Gratis

Extras din document

Functii de intrare / iesire relative la siruri de caractere.

Pentru a citi un sir de caractere de la intrarea standard se foloseste functia gets() având prototipul:

char *gets(char *s);

Functia gets() citeste caractere din fluxul standard de intrare stdin în zona de memorie adresata de pointerul s. Citirea continua pâna la întâlnirea sfârsitului de linie. Marcajul de sfârsit de linie nu este copiat, în locul lui fiind pus caracterul nul (’�’). Functia întoarce adresa zonei de memorie în care se face citirea (adica s) sau NULL, daca în locul sirului de caractere a fost introdus marcajul de sfârsit de fisier.

Pentru a scrie un sir de caractere terminat prin caracterul NULL, la iesirea standard stdout, se foloseste functia:

int puts(char *s);

Caracterul terminator nu este transmis la iesire, în locul lui punându-se marcajul de sfârsit de linie.

Caracterele citite într-un tablou ca un sir de caractere (cu gets()) pot fi convertite sub controlul unui format folosind functia:

int sscanf(char *sir, char *format, adrese_var_formatate);

Singura deosebire fata de functia scanf() consta în faptul ca datele sunt preluate dintr-o zona de memorie, adresata de primul parametru (si nu de la intrarea standard).

Exemplul 26: Scrieti o functie care citeste cel mult n numere reale, pe care le plaseaza într-un tablou x. Functia întoarce numarul de valori citite.

Vom citi numerele într-un sir de caractere s. De aici vom extrage în mod repetat câte un numar, folosind functia sscanf() si îl vom converti folosind un format corespunzator. Ciclul se va repeta de n ori, sau se va opri când se constata ca s-au terminat numerele.

Vom scrie functia în 2 variante: folosind tablouri sau folosind pointeri.

/* varianta cu tablouri */

int citreal(int n, double x[])

{ char s[255];

int j;

double y;

for (j=0; j<n; j++) {

if(gets(s)==NULL)

return j;

if(sscanf(s,”%lf”,&y)!=1) /*conversie ]n real*/

break; /*s-au terminat numerele*/

x[j]=y;

}

return j;

}

/* varianta cu pointeri */

int citreal(int n, double *px)

{ char s[255];

int j=0;

double y;

double *p=px+n;

while(px<p) {

if(gets(s)==NULL)

return j;

if(sscanf(s,”%lf”,&y)!=1) /*conversie in real*/

break; /*s-au terminat numerele*/

*px++=y;

j++;

}

return j;

}

Tablouri de pointeri.

Un tablou de pointeri este definit prin:

tip *nume[dimensiune];

Exemplul 27: Sa se sorteze o lista de nume.

Folosirea unui tablou de siruri de caractere este lipsita de eficienta, deoarece sirurile sunt de lungimi diferite. Vom folosi un tablou de pointeri la siruri de caractere.

Prin sortare nu se vor schimba sirurile de caractere, ci pointerii catre acestea.

Citirea sirurilor de caractere presupune:

• rezervarea de spatiu pentru siruri

• initializarea tabloului de pointeri cu adresele sirurilor

Pentru rezervarea de spatiu se foloseste functia char *strdup(char *s);

care:

• salveaza sirul indicat de s într-o zona de memorie disponibila, alocata dinamic

• întoarce un pointer catre zona respectiva sau NULL.

Citirea numelor este terminata prin EOF. Functia de citire întoarce numarul de linii citite:

int citire(char *tabp[]){

int j=0;

char tab[80];

while(1) {

gets(tab);

if(tab==NULL)

break;

tabp[j]=strdup(tab);

}

return j;

}

Sortarea o vom realiza cu algoritmul bulelor: daca sirul de nume ar fi ordonat, atunci doua nume consecutive s-ar afla în relatia < sau ==. Vom cauta asadar relatiile >, schimbând de fiecare data între ei pointerii corespunzatori (schimbare mai eficienta decât schimbarea sirurilor). Se fac mai multe parcurgeri ale listei de nume; la fiecare trecere, o variabila martor – sortat, initializata la 1 este pusa pe 0, atunci când se interschimba doi pointeri. Lista de nume va fi sortata în momentul în care în urma unei parcurgeri a listei se constata ca nu s-a mai facut nici o schimbare de pointeri.

void sortare(char *tp[], int n) {

int j, sortat;

char *temp;

for(sortat=0; !sortat;){

sortat=1;

for(j=0;j<n-1;j++)

if(strcmp(tp[j],tp[j+1])>0){

temp=tp[j],

tp[j]=tp[j+1],

tp[j+1]=temp,

sortat=0;

}

}

}

void afisare(char *tp[], int n){

int j;

for (j=0; j<n; j++)

if(tp[j])

puts(tp[j]);

}

void main(void)

{ int n;

char *nume[100];

n=citire(nume);

sortare(nume,n);

afisare(nume,n);

}

Preview document

Siruri de Caractere in C si C++ - Pagina 1
Siruri de Caractere in C si C++ - Pagina 2
Siruri de Caractere in C si C++ - Pagina 3
Siruri de Caractere in C si C++ - Pagina 4
Siruri de Caractere in C si C++ - Pagina 5
Siruri de Caractere in C si C++ - Pagina 6
Siruri de Caractere in C si C++ - Pagina 7
Siruri de Caractere in C si C++ - Pagina 8

Conținut arhivă zip

  • Siruri de caractere in C si C++.doc

Alții au mai descărcat și

Virusi si Antivirusi

Denumirea de virus a fost folosita în literatura de specialitate pentru prima data în anul 1983, de catre expertul american Fred Coen, de la...

Structuri de Date

1)Liste.Concept:Structura de date dinamica(isi schimba nr de elemente si relatiile dintre ele. Clasificare:simpu inlantuite,dublu...

Gestiunea Bazei de Date a unei Librării

Introducere Aplicaţia realizează gestiunea activităţii unei librării: - Înregistrează într-o bază de date cărţile care se găsesc în librărie; -...

Arbori Binari de Cautare

Arbori binari de cautare 1. Definiţii Un arbore este un graf orientat in care nu exista nici un ciclu(graf orientat aciclic) Un arbore binar...

Virusii Calculatoarelor

Evitarea virusilor Daca mesajele nesolicitate sunt suparatoare, virusii sunt daunatori. Corespondenta nesolicitata înseamna pierdere de timp si de...

Microsoft Excel

Dupa ce programul Excel a fost instalat, pentru a deschide programul Excel se vor efectua urmatorii pasi: - se face clic pe Start, iar pe ecran va...

Prelucrarea Imaginilor Digitale 1

Esantionarea si cuantificare sunt realizate de dispozitivele de achizitie a imaginilor. Acestea pot consta intr-un singur senzor care se misca...

Curs ASDN

1.1. Sisteme de numeratie - Sistemele numerice prelucrează informatie - Informatia este codificată ® un anumit tip de reprezentare - Sistemul...

Ai nevoie de altceva?