QReferate - referate pentru educatia ta.
Cercetarile noastre - sursa ta de inspiratie! Te ajutam gratuit, documente cu imagini si grafice. Fiecare document sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Documente informatica

Programe si functii cu siruri de caractere



PROGRAME SI FUNCTII CU SIRURI DE CARACTERE


EXEMPLE DE FUNCTII SI PROGRAME


E4.1  Program pentru citirea si afisarea unor linii la consola


#include <stdio.h>

void main ()


E4.2  Program pentru citirea unui text in memorie, cu pastrarea



caracterelor terminator de linie.


#include <stdio.h>

#include <string.h>

void main () ; // aici se memoreaza toate liniile

while ( gets (linie) != NULL)

puts(text); // afisare text citit, pe linii

}


Obs: O forma mai compacta pentru ciclul de citire, adaugare la text:


while ( gets (linie) != NULL)

strcat (text, strcat(linie,'n'));


E4.3 Program pentru citirea de siruri separate prin spatii albe intre ele

(se pot introduce mai multe siruri intr-o linie):


#include <stdio.h>

#include <string.h>

void main ()


Obs.: Toate programele de mai sus pot fi folosite cu fisiere text de

intrare si de iesire prin redirectarea fisierelor standard stdin si stdout.


E4.4 Functie pentru insertia unui caracter la o adresa dintr-un sir.

Functie pentru insertia unui sir s la o adresa data din alt sir d.


// insertie caracter intr-un sir

void  chins (char *d, char ch)

// insertie sir s la adresa d

void strins (char *d, char *s)



E4.5 Functie echivalenta ca efect cu functia 'strstr'


#include <stdio.h>

#include <string.h>

// cauta un sir in alt sir

char * strstr ( char * s1, char* s2)

// verificare functie

void main ()


E4.6 Functie echivalenta ca efect cu functia 'strtok' :


//extrage din sir atomi separati prin caractere specificate

char *strtok (char * sir,char *separ)



E4.7 Program pentru numararea liniilor si cuvintelor dintr-un fisier text,

al carui nume se da in linia de comanda. Cuvintele sunt siruri de orice

caractere separate intre ele prin (oricate) spatii albe. Se va folosi

functia de biblioteca 'strtok'.


#include <stdio.h>

#include <string.h>

// numarare linii si cuvinte dintr-un fisier text

void main ( int argc, char *argv[] )

if( (f = fopen (argv[1],'r')) == NULL)

while ( fgets (linie,200,f) != NULL)

}

printf ('n %d linii %d cuvinte',nl,nc); // si alte operatii cu linia citita

fclose(f);


E4.8 Program pentru numararea liniilor si cuvintelor dintr-un fisier text,

al carui nume se da in linia de comanda. Cuvintele sunt siruri de orice

caractere separate intre ele prin (oricate) spatii albe. Nu se vor folosi

functii pe siruri de caractere din <string.h>.


#include <stdio.h>

#include <ctype.h>

// numarare linii si cuvinte dintr-un fisier text

void main ( int argc, char *argv[] )

}

printf ('%d linii %d cuvinte',nl,nc); // si alte operatii cu linia citita

fclose(f);



E4.9 Program pentru citirea unui fisier de numere (reprezentate prin

siruri de caractere separate prin spatii albe) si crearea unui alt fisier

cu aceleasi numere ordonate crescator. Numele celor doua fisiere se dau in

linia de comanda.



// ordonare fisier de numere

#include <stdio.h>

#include <stdlib.h>

// compara doi intregi (ptr qsort)]

int intcmp (const void* a , const void * b)

// program de ordonare fisier de numere

int main (int na, char ** arg)

// citire fisier de date

if ( (f1=fopen (arg[1],'rt'))==0)

i=0;

while ( fscanf(f1,'%d',&num[i]) != EOF)

i++;

n=i; // lungime vector

// ordonare vector cu functia 'qsort'

qsort (num,n,sizeof(int), intcmp);

// scrie vector ordonat in fisier

f2=fopen(arg[2],'wt');

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

fprintf(f2,'%d ',num[i]);

fclose(f2);



Obs: Nu era posibila ordonarea numerelor ca siruri de caractere (fara

conversie in binar), deoarece sirul '7' este superior sirului '123', dar

numarul 7 este inferior numarului 123.


E4.10 Program pentru citirea unui fisier text creat in Unix (in care fiecare

linie se termina cu un singur caracter 'n' ) si crearea unui alt fisier

cu acelasi continut, dar in care liniile se termina cu doua caractere: 'rn'.

In final se sterge fisierul initial si se schimba numele noului fisier in

numele fisierului initial. Functia 'fputs' adauga caracterul 'r' inaintea

caracterului 'n'.


#include <stdio.h>

#include <string.h>

void main ()

strcpy(nume2,nume1);

point = strchr (nume2,'.');

if (point==0)

point=nume2+strlen(nume2);

strcpy(point+1,'$$$');

f2 =fopen (nume2,'w');

while ( fgets (line,200,f1) != 0)

fputs (line,f2);

if (fclose(f1)<0 || fclose(f2)<0)

remove(nume1); rename(nume2,nume1); // schimba nume1.$$$ in nume1.*


PROBLEME PROPUSE



P4.1 Functii echivalente ca efect cu functiile de biblioteca strlen,

strcpy, strcat, strcmp, strchr, strrchr


P4.2 Functii echivalente ca efect cu functiile de biblioteca

strncpy, strncat, strncmp.


P4.3 Functie pentru eliminarea unui subsir de lungime data dintr-un sir

dat prin adresa sa (si terminat cu zero). Functie pentru inserarea

unui sir dat la o adresa dintr-un sir terminat cu zero.


P4.4 Program care inlocuieste toate aparitiile unui sir dat printr-un

alt sir (de lungime diferita), intr-un text aflat in memorie. Se pot folosi

functiile din programul anterior.


P4.5 Functie care primeste o data calendaristica ca un sir de forma

'DD-MM-YY' si produce un vector cu 3 intregi ce corespund numarului zilei

(DD), lunii(MM) si anului(YY). Se pot folosi functii de biblioteca

(sscanf, atoi, strtok, strchr etc.). Program ptr verificare functie.


P4.6 Program pentru numararea si afisarea cuvintelor separate prin spatii

albe (dintr-un text) in doua variante :

(a) folosind functia de biblioteca 'strtok'.

(b) folosind functia de biblioteca 'sscanf'


P4.7 Sa se rescrie functia 'strtok' astfel ca primul argument sa reprezinte

adresa din sir de unde incepe cautarea, la fiecare apel (fara variabila

statica). Se adauga un al treilea argument unde functia depune atomul

extras din text, iar rezultatul functiei este adresa urmatoare atomului

gasit. Sa se modifice si programul care foloseste functia modificata.


P4.8 Functie care extrage urmatorul sir de litere de la o adresa data

(se ignora caracterele dinainte care nu sunt litere). Rezultatul este

adresa imediat urmatoare sirului gasit sau NULL daca nu s-a gasit nici

un sir de litere.


P4.9 Program pentru citirea unui text sursa C in memorie si afisarea

frecventei de aparitie a urmatoarelor cuvinte cheie in text: if, for,

do, while, switch, break.


P4.10 Program pentru ordonarea unui fisier text dupa cuvantul numarul k

din fiecare linie (k=0,1,..n-1). Fiecare linie contine n cuvinte separate

prin spatii albe. Numele fisierului si intregul k se transmit prin linia de

comanda ( exemplu: sort linii 1).


P4.11 Program pentru afisarea frecventei de aparitie a cuvintelor folosite

de mai multe ori intr-un fisier text. Nu se vor afisa cuvintele folosite o

singura data.


P4.12 Program pentru citirea unui fisier text si crearea unui alt fisier text

cu linii de o lungime maxima impusa, fara a desparti cuvintele la trecerea de

pe o linie pe alta. Cuvintele sunt siruri separate prin unul sau mai multe

spatii albe.


P4.13 Program pentru citirea unui fisier text si scrierea unui alt fisier

(cu acelasi numar de linii) in care fiecare linie se termina cu un caracter

diferit de spatiu alb, prin inserarea de blancuri intre cuvinte cat mai

uniform posibil. In fisierul de iesire toate liniile au aceeasi lungime,

specificata in linia de comanda, dupa numele fisierului de intrare.


P4.14  Program pentru citirea unui fisier sursa C si afisarea textului

dupa eliminarea comentariilor din text. Se vor elimina ambele tipuri de

comentarii: cele care incep prin '//' si cele delimitate de '/*' si '*/'.

Un comentariu nu poate contine nici un alt comentariu. Perechile de

caractere //,/* si */ intr-o constanta sir nu semnifica comentarii.


P4.15 Program care inlocuieste toate aparitiile unui sir dat printr-un

alt sir (de lungime diferita), intr-un fisier text. Se va crea un alt

fisier text (cu acelasi nume dar cu extensia '$$$'). In final se

schimba extensia fisierului initial in 'BAK' si fisierul creat primeste

extensia fisierului initial.


P4.16  Program care citeste un fisier HTML si creeaza un fisier text (ASCII)

dupa eliminarea tuturor marcajelor din text. Un marcaj ('tag') incepe prin

caracterul '<' si se termina cu caracterul '>', poate contine oricite

caractere si se poate extinde pe mai multe linii. Programul va verifica daca

primele caractere diferite de blanc din fisierul de intrare sunt <HTML >

sau <!DOCTYPE HTML >.


SOLUTII LA PROBLEME PROPUSE


R4.1

// lungime sir terminat cu zero

int strlen ( char * s)

// copiaza sir la adresa d de la adresa s

char * strcpy ( char * d, char * s)

// concatenare sir s in prelungirea sirului d

char * strcat (char * d, char * s)

// cauta un caracter c intr-un sir d

char * strchr (char * d, char c)

// cauta ultima aparitie a lui c in sirul d

char * strrchr (char * d, char c)

// comparare de siruri

int strcmp ( char * s1, char * s2) while ( *s1++ && *s2++);

return 0; // siruri egale pe toata lungimea


// cauta sirul s in sirul d

char * strstr ( char *d, char * s)

if ( *ps == 0)

return d;

else

++d;

}

return 0;


R4.2

// echivalenta cu 'strncpy'

char * stcpy (char* d, char * s,int n)

*d=0; return dd;


// echivalenta cu 'strncat'

char * stcat (char* d, char * s,int n)

*d=0; return dd;


// echivalenta cu 'strncmp'

int stcmp ( char * d, char *s, int n)

if (n==0 || (*d==0 && *s==0) )

return 0; // siruri egale

else

if (*d < *s)

return -1;

else

return 1;



R4.3

/* sterge n caractere de la adresa d */

void strdel (char *d, int n)

// insertie sir s la adresa d

void strins (char *d, char *s)

// varianta de insertie sir

void strins (char *d, char *s)

// alta varianta de insertie sir s la adresa d

void strins (char *d, char *s)



R4.4

// inlocuieste in txt toate apritiile lui s1 prin s2

void main ()

puts (txt); // afisare text dupa inlocuire



R4.5

// extragere subsiruri dintr-un sir (var.1)

void data (char * d, int r[3])

// extragere subsiruri dintr-un sir (var. 2)

void data (char *d, int r[])

// verificare

void main ()



R4.6

// afisare si numarare cuvinte

// (a) cu 'strtok'

main ()

printf ('%d atomi n', nt);


// afisare si numarare cuvinte (atomi)

// (b) cu 'sscanf'

main ()

printf ('%d atomi n', nt);



R4.7

char *strtok2 (char * sir,char *separ, char * tok)


// afisare si numarare cuvinte (atomi)

main ()

printf ('%d atomi n', nt);



R4.8

// extrage de la adresa adr un sir de litere la adresa rez

char * nextword ( char * adr, char * rez)


R4.9

// frecv de utilizare a unor cuvinte cheie

#include <stdio.h>

#include <string.h>

#include <ctype.h>

// cauta in tabel de cuv cheie

int keyw ( char * nume, char * kw[], int n )

// extrage de la adresa adr un cuvint la adresa rez

char * next ( char * adr, char * rez)


void main () ;

int nr[5]=; // nr de aparitii ptr fiecare cuvint

int k,lc,n=5; // lungime vectori kw si nr

printf ('nume fisier: '); scanf('%s',buf);

f=fopen (buf,'r');

if (f==NULL)

while ( fgets(buf,128,f)!=0 )

}

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

printf ('%8s = %d n',kw[k],nr[k]);


R4.10

// compara doua siruri dupa cuvantul k din sir (k=0,1,..)

int compar ( char * a, char * b, int k)

return strcmp(w1,w2);


// ordonare linii din fisier text dupa orice cuvant din linie

void main ( int argc, char * argv[])

} while (!gata);

// afisare fisier ordonat

puts('');

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

printf('%s',tlin[k]);



R4.11

typedef char word[30];   // un cuvint

// functie care cauta un sir intr-un vector de siruri

int caut ( word w, word t[], int n)

// program principal

void main () {

FILE * f; char numef[50]; // nume fisier text

word cuv[300]; // tabel de cuvinte

int nr[300]=; int n,k,lc;

char linie[80], * adr, *sep=' tn';

puts('Nume fisier:'); gets(numef);

f=fopen(numef,'r'); //deschide fisier

n=0; // nr de cuvinte in vector

while ( fgets(linie,80,f) != 0)

adr=strtok(0,sep); // urmatorul cuvant

}

}

// afisare rezultate

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

if ( nr[k] > 1)

printf ('%s %d n', cuv[k],nr[k]);



R4.16

// conversie din HTML in text ASCII

#include <stdio.h>

#include <string.h>

void main ()

tag=0;

while ( fgets(hline,132,html) )

}

*p2=0;

fputs (tline,text);

}

fclose(text);



Nu se poate descarca referatul
Acest document nu se poate descarca

E posibil sa te intereseze alte documente despre:


Copyright © 2024 - Toate drepturile rezervate QReferat.com Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site.
{ Home } { Contact } { Termeni si conditii }