问题标题:
霍夫曼编码a.随机输入一段英文(含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“.”);b.统计各种符号出现的频度;c.进行Huffman编码(以二进制01代码输出);d.以上一步的输出(
问题描述:

霍夫曼编码

a.随机输入一段英文(含标点、空格以及大小写的区分,标点仅限逗号“,”和句点“.”);

b.统计各种符号出现的频度;

c.进行Huffman编码(以二进制01代码输出);

d.以上一步的输出(二进制序列)作为输入进行解码,恢复原英文;

e.比较输入和输出,统计出错的个数.

高建英回答:
  #include<stdio.h>   #include<string.h>   #include<conio.h>   main()   {   inti,k,j=0,w,r,m,n,x,v;   charbian[30]="110111100110111100";   chara[4]="110";/*a的霍夫曼编码*/   charb[4]="111";/*b的霍夫曼编码*/   charc[4]="10";/*c的霍夫曼编码*/   chard[4]="0";/*d的霍夫曼编码*/   m=strlen(a);   n=strlen(b);   x=strlen(c);   v=strlen(d);   chartemp[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;/*如果解析成功就跳出里层循环,继续解析下一个编码*/   }   elseif(strncmp(temp,b,n)==0)/*判断编码是否为b*/   {   shou[j]='b';   j++;   i=i+k+1;   break;   }   elseif(strncmp(temp,c,x)==0)/*判断编码是否为c*/   {   shou[j]='c';   j++;   i=i+k+1;   break;   }   elseif(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]);   return0;   }
查看更多
其它推荐
热门其它推荐