📄 encode.c
字号:
void encode(void)
{
int i=0,n=0,j,t,c,choice;
Sign sign[STRINGLENGTH]={{'\0',0}};
HuffmanTree HT;
HuffmanCode HC;
char ch,filename[30],filename1[30],temp,temp1;
FILE *fp,*fp1;
clrscr();
printf("----------------------------------ENCODING----------------------------\n\n");
printf("Please enter the path of the file:\n\n\n");
printf(" Path:");
gets(filename);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("Cannot open this file.\n"); getch();
exit(0);
}
i=0,j=0,n=0; /*统计字符*/
while(!feof(fp))
{
ch=fgetc(fp);
for(j=0;sign[j].cha!=ch&&sign[j].cha!='\0';j++); /*found sign*/
if(sign[j].cha=='\0')
{
sign[j].cha=ch;
n++;
}
sign[j].num++;
}
fclose(fp);
HuffmanCoding(&HT,&HC,sign,n); /*编码,得到哈夫曼树HT,和各字符的编码HC*/
/*选择储存编码的文件路径*/
clrscr();
printf("----------------------------------ENCODING----------------------------\n\n");
printf("Please enter the path you want to save to:(e.x: c:\\Codefile )\n\n\n");
gets(filename1);
if((fp=fopen(filename1,"wb"))==NULL) /*写入的文本*/
{
printf("Cannot open this file.\n");
exit(0);
}
ch=n; /*先存不同字母个数*/
fputc(ch,fp);
/*然后存哈夫曼树*/
for(i=0;i<2*n-1;i++)
fwrite(&HT[i],sizeof(HTNode),1,fp);
clrscr();
printf("----------------------------------ENCODING----------------------------\n\n");
if((fp1=fopen(filename,"rb"))==NULL) /*原文件*/
{
printf("Cannot open this file.\n"); getch();
exit(0);
}
c=7;
temp=0;
while(!feof(fp1))
{
ch=fgetc(fp1);
for(j=1;HC[j][0]!=ch;j++);
t=1;
while(HC[j][t]!='\0')
{
if(HC[j][t]=='0')
temp1=0;
else
temp1=1;
temp1=temp1<<c;
temp=temp|temp1;
c--;
if(c<0)
{
fputc(temp,fp);
temp=0;
c=7;
}
t++;
}
}
if(c!=7)
fputc(temp,fp);
fclose(fp);
fclose(fp1);
printf("\n\n\nThe code has already been saved to "); /*反馈写入完毕信息*/
puts(filename1);
printf("\n\n\n\n\n Press any key");
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -