Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void unesi(char niz[],int velicina)
- {
- char znak = getchar();
- if(znak == '\n' ) znak = getchar();
- int i;
- for(i=0; i<velicina-1; i++) {
- niz[i]=znak;
- znak=getchar();
- if(znak=='\n') {
- i++;
- break;
- }
- }
- niz[i]='\0';
- }
- int kompresuj(char *dat1,char *dat2)
- {
- FILE *unos= fopen(dat1,"r");
- char znak,tmpRijec[50];
- char *p=tmpRijec;
- char rijeci[1000][10]= {'\0'};
- int brojPonavljanja[1000]= {0};
- int brojRijeci=0,i,j,tmp;
- int pronadena;
- int dodatak=1;
- if(!unos) {
- printf("Datoteka %s nije pronadena!",dat1);
- return 0;
- } //da li je datoteka za unos otvorena
- while((znak=fgetc(unos))!=EOF || dodatak) {
- if(znak==EOF) {
- dodatak=0;
- }
- if((znak>='A' && znak<='Z')||(znak>='a' && znak<='z')) {
- *p=znak;
- p++;
- } else {
- *p='\0';
- if(strlen(tmpRijec)<10) {
- pronadena=0;
- for(i=0; i<brojRijeci; i++) {
- if(strcmp(tmpRijec,rijeci[i])==0) {
- brojPonavljanja[i]++;
- pronadena=1;
- break;
- }
- }
- if(pronadena==0 && *tmpRijec!='\0') {
- strcpy(rijeci[brojRijeci],tmpRijec);
- brojPonavljanja[brojRijeci]++;
- brojRijeci++;
- }
- }
- p=tmpRijec;
- }
- } //unos rijeci
- for(i=0; i<brojRijeci; i++) {
- for(j=i+1; j<brojRijeci; j++) {
- if(brojPonavljanja[i]<brojPonavljanja[j]) {
- tmp=brojPonavljanja[i];
- strcpy(tmpRijec,rijeci[i]);
- brojPonavljanja[i]=brojPonavljanja[j];
- strcpy(rijeci[i],rijeci[j]);
- brojPonavljanja[j]=tmp;
- strcpy(rijeci[j],tmpRijec);
- } else if(brojPonavljanja[i]==brojPonavljanja[j] && strcmp(rijeci[i],rijeci[j])>0) {
- tmp=brojPonavljanja[i];
- strcpy(tmpRijec,rijeci[i]);
- brojPonavljanja[i]=brojPonavljanja[j];
- strcpy(rijeci[i],rijeci[j]);
- brojPonavljanja[j]=tmp;
- strcpy(rijeci[j],tmpRijec);
- }
- }
- } //sortiranje nizova
- if(brojRijeci>10) brojRijeci=10;
- fseek(unos,0,SEEK_SET);
- FILE *upis=fopen(dat2,"w");
- if(!upis) {
- printf("Doslo je do greske prilokom otvaranja datoteke %s",dat2);
- fclose(unos);
- return 0;
- }
- for(i=0; i<brojRijeci; i++) {
- if(brojPonavljanja[i]!=0) {
- fputs(rijeci[i],upis);
- fputc('\n',upis);
- } else break;
- } //unos tabele
- if(i!=10) fputc('\n',upis);
- p=tmpRijec;
- dodatak=1;
- while((znak=fgetc(unos))!=EOF || dodatak) {
- if(znak==EOF) {
- dodatak=0;
- }
- if((znak>='A' && znak<='Z')||(znak>='a' && znak<='z')) {
- *p=znak;
- p++;
- } else {
- *p='\0';
- if(strlen(tmpRijec)<10) {
- for(i=0; i<brojRijeci; i++) {
- if(strcmp(tmpRijec,rijeci[i])==0) {
- fprintf(upis,"[%d]%c",i+20,znak);
- break;
- }
- }
- if(i==brojRijeci) fprintf(upis,"%s%c",tmpRijec,znak);
- } else if(*tmpRijec!='\0') {
- fprintf(upis,"%s ",tmpRijec);
- } else fputc(znak,upis);
- p=tmpRijec;
- }
- }
- printf("Datoteka kompresovana.\n");
- fclose(unos);
- fclose(upis);
- return 1;
- }
- int dekompresuj(char *dat1,char *dat2)
- {
- FILE* unos=fopen(dat1,"r");
- if(!unos) {
- printf("Greska: %s",dat1);
- return 0;
- }
- FILE* upis=fopen(dat2,"w");
- if(!upis) {
- printf("Greska: %s",dat2);
- fclose(unos);
- return 0;
- }
- char rijeci[10][10];
- char tmpRijec[10];
- int brojRijeci=0;
- int tmpBroj;
- char znak;
- int i=0;
- while(fgets(rijeci[brojRijeci],10,unos)!=NULL) {
- //fseek(unos,-1,SEEK_CUR);
- //fscanf(unos,"%s\n",tmpRijec);
- //strcpy(rijeci[brojRijeci],tmpRijec);
- if((rijeci[brojRijeci][0]<'A' || rijeci[brojRijeci][0]>'Z') && (rijeci[brojRijeci][0]<'a' || rijeci[brojRijeci][0]>'z')) break;
- brojRijeci++;
- }
- for(i=0; i<brojRijeci; i++) {
- rijeci[i][strlen(rijeci[i])-1]='\0';
- }
- while((znak=fgetc(unos))!=EOF) {
- if(znak=='[') {
- fscanf(unos,"%2s]",tmpRijec);
- tmpRijec[2]='\0';
- tmpBroj=atoi(tmpRijec);
- fputs(rijeci[tmpBroj-20],upis);
- } else fputc(znak,upis);
- }
- fclose(upis);
- fclose(unos);
- printf("Datoteka dekompresovana.\n");
- return 1;
- }
- int main()
- {
- int i;
- char datoteka1[100],datoteka2[100];
- do {
- printf("Odaberite: 1 - kompresuj, 2 - dekompresuj, 0 - izlaz: ");
- scanf("%d",&i);
- switch(i) {
- case 1:
- printf("Unesite ime ulazne datoteke: ");
- unesi(datoteka1,100);
- printf("Unesite ime izlazne datoteke: ");
- unesi(datoteka2,100);
- kompresuj(datoteka1,datoteka2);
- break;
- case 2:
- printf("Unesite ime ulazne datoteke: ");
- unesi(datoteka1,100);
- printf("Unesite ime izlazne datoteke: ");
- unesi(datoteka2,100);
- dekompresuj(datoteka1,datoteka2);
- break;
- case 0:
- break;
- }
- } while(i!=0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement