
首先,我们来看看main函数:
void main()
{
char choice=' ';
while(choice!='q')
{ cout<<"\n******************************"< cout<<" 欢迎使用赫夫曼编码译码系统"< cout<<"******************************"< cout<<"(1)要初始化赫夫曼链表请输入'i'"< cout<<"(2)输入要编码的字符'w'"< cout<<"(3)要编码请输入'e'"< cout<<"(4)要译码请输入'd'"< cout<<"(5)要打印编码请输入'p'"< cout<<"(6)要打印赫夫曼树请输入't'"< cout<<"(7)要离开请输入'q'"< if(flag==0)cout<<"\n请先初始化赫夫曼链表,输入'i'"< cin>>choice;
switch(choice)
{
case 'i':
Initialization();
break;
case 'w':
InputCode();
break;
case 'e':
Encoding();
break;
case 'd':
Decoding();
break;
case 'p':
Code_printing();
break;
case 't':
Tree_printing(HT,2*n-1);
break;
case 'q':
break;
default:
cout<<"input error"< }
}
free(z);
free(w);
free(HT);
}
这个函数主要就是和用户交互使用。这个过程我用switch case 来实现,你们也可以选择其他的方式实现如if else ,这个就个人爱好选择。下面我们来看看初始化赫夫曼树的函数Initialization()。
void Initialization()
{
flag=1;
int num;
int num2;
cout<<"下面初始化赫夫曼链表"< cin>>num;
n=num;
w=(int*)malloc(n*sizeof(int));
z=(char*)malloc(n*sizeof(char));
cout<<"\n请依次输入"< char base[2];
for(i=0;i {
cout<<"第"< gets(base);//这个地方有点小小的问题
*(z+i)=*base;
}
for(i=0;i<=n-1;i++)
{
cout< }
cout<<"\n请依次输入"< for(i=0;i<=n-1;i++)
{
cout< cin>>num2;
*(w+i)=num2;
}
HuffmanCoding(HT,HC,w,n);
//------------------------打印编码-------------------------------------------
cout<<"字符对应的编码为:"< for(i=1;i<=n;i++)
{
//cout<<"字符"<<*(z+i-1)<<"的编码";
puts(HC[i]);
}
//--------------------------将赫夫曼编码写入文件------------------------
cout<<"下面将赫夫曼编码写入文件"< FILE *hfmTree;
char r[]={' ','\0'};
if((hfmTree=fopen("hfmTree.txt","w"))==NULL)
{
cout<<"can not open file"< return;
}
fputs(z,hfmTree);
for(i=0;i {
fprintf(hfmTree,"%6d",*(w+i));
fputs(r,hfmTree);
}
for(i=1;i<=n;i++)
{
fputs(HC[i],hfmTree);
fputs(r,hfmTree);
}
fclose(hfmTree);
cout<<"已将字符与对应编码写入根目录下文件hfmTree.txt中"< }
正在阅读:
2017年计算机等级考试二级C++辅导:C++实现赫夫曼编码/译码器11-19
2016年二级建造师建筑工程考试大纲目录03-06
金铲铲之战精密龙狙怎么玩 阵容玩法攻略06-13
我最喜欢的动物作文300字11-03
见习期个人的述职报告示例【三篇】08-31
倾听作文450字10-30
2017年天津中西医执业医师考试分数线02-25
儿童趣味绕口令:《老姥姥不恼姥姥不恼》03-11
我不再为失败而放弃坚持作文400字07-31
我喜欢桃花作文450字09-26