Administratie | Alimentatie | Arta cultura | Asistenta sociala | Astronomie |
Biologie | Chimie | Comunicare | Constructii | Cosmetica |
Desen | Diverse | Drept | Economie | Engleza |
Filozofie | Fizica | Franceza | Geografie | Germana |
Informatica | Istorie | Latina | Management | Marketing |
Matematica | Mecanica | Medicina | Pedagogie | Psihologie |
Romana | Stiinte politice | Transporturi | Turism |
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);
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 } |
Documente similare:
|
ComentariiCaracterizari
|
Cauta document |