作业帮 > 综合 > 作业

霍夫曼编码a.随机输入一段英文(含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“.”);b.统计各种符号出现的频

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/07/15 10:59:21
霍夫曼编码
a.随机输入一段英文(含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“.”);
b.统计各种符号出现的频度;
c.进行Huffman编码(以二进制01代码输出);
d.以上一步的输出(二进制序列)作为输入进行解码,恢复原英文;
e.比较输入和输出,统计出错的个数.
霍夫曼编码a.随机输入一段英文(含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“.”);b.统计各种符号出现的频
# include <stdio.h>
# include <string.h>
# include <conio.h>
main()
{
int i,k,j=0,w,r,m,n,x,v;
char bian[30]="110111100110111100";
char a[4]="110";/*a的霍夫曼编码*/
char b[4]="111";/*b的霍夫曼编码*/
char c[4]="10";/*c的霍夫曼编码*/
char d[4]="0";/*d的霍夫曼编码*/
m=strlen(a);
n=strlen(b);
x=strlen(c);
v=strlen(d);
char temp[4],shou[8];
r=strlen(bian);
for(i=0;i<r;)/*外层循环用于控制解码进度*/
{
temp[0] = temp[1] = temp[2] = 0;
for(k=0;k<3;k++)/*里层用于具体解析每个字符编码*/
{
w=i+k;
temp[k]=bian[w];
if(strncmp(temp,a,m)==0)/*判断编码是否为a*/
{
shou[j]='a';/*shou数组用于存储解析出来的字符*/
j++;
i=i+k+1;
break;/*如果解析成功就跳出里层循环,继续解析下一个编码*/
}
else if(strncmp(temp,b,n)==0)/*判断编码是否为b*/
{
shou[j]='b';
j++;
i=i+k+1;
break;
}
else if(strncmp(temp,c,x)==0)/*判断编码是否为c*/
{
shou[j]='c';
j++;
i=i+k+1;
break;
}
else if(strncmp(temp,d,v)==0)/*判断编码是否为d*/
{
shou[j]='d';
j++;
i=i+k+1;
break;
}
else
continue;/*如果都不是就再取出一个编码,再与abcd的字符编码相比*/
}
}
for(i=0;i<8;i++)
printf("%c",shou[i]);
return 0;
}