typedef struct cnode
{
char bits[leafnum+1];
int start;
char ch;
}hufcode;
hufcode code[leafnum];
void creatcodehuffman(hufcode code[],huftree tree[])
3.2.2 哈夫曼译码
在接收端将受到的二进制数0、1序列转换成对应的字符序列,这就是译码。哈弗曼译码就是先输入要译码的字符串的二进制编码,然后从哈夫曼树的根结点出发,对二进制编码按照二进制位串中的0和1 确定是进入左分支还是右分支;若编码为0,则进入结点的左孩子,否则进入结点的右孩子;一旦到达叶结点,就译出该叶子结点所代表的字符;若字符串没有结束,则重新输入一串新的二进制编码,回到根结点继续进行译码,知道二进制字符串全部译完为止。用哈夫曼树得到的译码就是哈弗曼译码。其实现算法如下:
void transhufcode(hufcode code[],huftree tree[])
{
int m,k,f;
char s[200]={'\0'};
char c;
std::cout<<"请输入二进制编码(以'*'结束)"<<std::endl;
k=1;
while((c=getchar())!='*')
{
s[k]=c;
k++;
}
m=k;
k=1;
std::cout<<"输出哈夫曼译码:"<<std::endl;
while(k<m)
{ Excel在计算机审计中的应用研究现状问题及应对措施
f=hufnum-1;
while(tree[f].lchild!=0)
{本文来自辣.文,论-文·网原文请找腾讯324-9114
if(s[k]=='0')
f=tree[f].lchild;
if(s[k]=='1')
f=tree[f].rchild;
k++;
}
std::cout<<code[f].ch;
}
std::cout<<std::endl;
}
3.3 文件流
从C语言的角度看,文件实际上是一个存储在外存中的由一串连续字符(字节)构成的任意信息序列,即字符流。C程序需要按照特定的规则去访问这个序列。在c语言中,文件的打开操作是通过fopen()函数实现此函数在声明“stdio.h”中,函数原型如下:FILE *fopen(const *char filename,const char *mode);函数返回值为FILE类型的指针。如果运行成功,fopen返回文件的地址,否则返回值为NULL。其中mode为控制文件的打开方式的参数。根据不同需求,文件打开方式有如下模式:只读模式,只写模式,追加模式,读写模式。在哈夫曼编码系统中,程序采用的是读写模式。文件的关闭是通过fclose()函数来实现的。此函数在声明“stdio.h”中的函数原型为:int fclose(FILE *fp);函数返回值为int类型,如果为0,则表示文件关闭成功,否则表示失败。字符的读写主要用putc(),getc()函数。在写入文件的过程中,是手动一个一个字符输入的,所以在其中利用一个for循环,输入要写入文件的字符串,直到出现结束符号“*”,则要求写入文件的字符串写入完成,在对应地区的存盘文件中可以打开文件查阅。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页