📄 哈夫曼编码.cpp
字号:
#include <iostream.h>
#include "creat.h"
main()
{
int m=0,n,i,j,k=0;
huffnode ht[2*Maxsize];
huffcode hcd[Maxsize];
char choice;
cout<<" 班级:计算机学院软件二班 姓名:肖珊 学号:200208034229"<<endl<<endl;
cout<<" 欢迎使用哈夫曼编码译码程序!"<<endl;
for(; ;)
{
cout<<endl;
cout<<" Menu:"<<endl;
cout<<" **************************************************************************"<<endl<<endl<<endl;
cout<<" * Initializalition----初始化哈夫曼树 -i *"<<endl<<endl;
cout<<" * Encoding------------编码 -e *"<<endl<<endl;
cout<<" * Decoding------------译码 -d *"<<endl<<endl;
cout<<" * Print---------------印代码文件 -p *"<<endl<<endl;
cout<<" * Tree printing-------印哈夫曼树 -t *"<<endl<<endl;
cout<<" * Quit----------------退出本系统 -q *"<<endl<<endl;
cout<<" **************************************************************************"<<endl<<endl;
cout<<" 输入你的选择:";
cin>>choice;
cout<<" **************************************************************************"<<endl;
cout.flush();
system("cls");
if(choice=='q')
{
cout<<" 谢谢你使用本程序!"<<endl;
return;
}
else
switch(choice)
{
case 'i':
for( ; ;)
{
cout<<" 请输入叶子结点个数:";
cin>>n;
if(n<=1)
{
cout<<endl;
cout<<" 叶子结点数输入错误,请重新输入:";
}
else break;
}
cout<<endl;
cout<<" 请输入哈夫曼树各个叶子结点的值:"<<endl;
for(i=1;i<=n;i++)
ht[i].data=getchar();
cout<<endl;
cout<<" 请输入各个叶子结点的权值:"<<endl;
for(i=1;i<=n;i++)
cin>>ht[i].weight;
cout<<endl;
j=Creahuffman(ht,n);
Creahfcode(ht,hcd);
Disphuffman(ht,hcd,n);
Filewrite(ht,n,j);
cout<<" **************************************************************************"<<endl;
cout<<" 按enter键返回主菜单"<<endl;
cout.flush();
getchar();
getchar();
system("cls");
m=1; //选项标志位,判断是否已经选过这一项
break;
case 'e':
if(m==1)
Encoding(ht,hcd);
else if(m==0)
{
j=Fileread(ht);
Creahfcode(ht,hcd);
Encoding(ht,hcd);
}
k=1;
cout<<" **************************************************************************"<<endl;
cout<<" 按enter键返回主菜单"<<endl;
cout.flush();
getchar();
system("cls");
break;
case 'd':
if(k==1)
{
if(m==1)
{
int temp;
cout<<" **************************************************************************"<<endl;
cout<<" 选择你想要译码的方式:"<<endl;
cout<<" 1.从文件中读取要译码的内容。"<<endl;
cout<<" 2.直接输入要译码的内容。"<<endl;
cout<<" **************************************************************************"<<endl;
for(; ;)
{
cin>>temp;
if(temp==1||temp==2)
break;
else cout<<" 选择错误,请重新选择!"<<endl;
}
if(temp==1)
{
char t[5*Maxsize];
int test;
test=Readfile1(t);
if(!test) //如果打开文件失败
break;
Decoding2(ht,j,t);
}
else if(temp==2)
Decoding(ht,j);
cout<<" **************************************************************************"<<endl;
cout<<" 按enter键返回主菜单"<<endl;
cout.flush();
getchar();
system("cls");
}
else if(m==0)
{
int temp;
cout<<" **************************************************************************"<<endl;
cout<<" 选择你想要译码的方式:"<<endl;
cout<<" 1.从文件中读取要译码的内容。"<<endl;
cout<<" 2.直接输入要译码的内容。"<<endl;
cout<<" **************************************************************************"<<endl;
for(; ;)
{
cin>>temp;
if(temp==1||temp==2)
break;
else cout<<" 选择错误,请重新选择!"<<endl;
}
if(temp==1)
{
char t[5*Maxsize];
j=Fileread(ht);
int test;
test=Readfile1(t);
if(!test) //假如读入文件失败
break;
Decoding2(ht,j,t);
}
else if(temp==2)
{
j=Fileread(ht);
Decoding(ht,j);
}
cout<<" **************************************************************************"<<endl;
cout<<" 按enter键返回主菜单"<<endl;
cout.flush();
getchar();
system("cls");
}
}
else if(k==0)
{
char t[5*Maxsize];
if(m==0)
{
int temp;
cout<<" **************************************************************************"<<endl;
cout<<" 选择你想要译码的方式:"<<endl;
cout<<" 1.从文件中读取要译码的内容。"<<endl;
cout<<" 2.直接输入要译码的内容。"<<endl;
cout<<" **************************************************************************"<<endl;
for(; ;)
{
cin>>temp;
if(temp==1||temp==2)
break;
else cout<<" 选择错误,请重新选择!"<<endl;
}
if(temp==1)
{
j=Fileread(ht);
int test;
test=Readfile1(t);
if(!test)
break;
Decoding2(ht,j,t);
}
else if(temp==2)
{
j=Fileread(ht);
Decoding(ht,j);
}
cout<<" **************************************************************************"<<endl;
cout<<" 按enter键返回主菜单"<<endl;
cout.flush();
getchar();
system("cls");
}
else if(m==1)
{
int temp;
cout<<" **************************************************************************"<<endl;
cout<<" 选择你想要译码的方式:"<<endl;
cout<<" 1.从文件中读取要译码的内容。"<<endl;
cout<<" 2.直接输入要译码的内容。"<<endl;
cout<<" **************************************************************************"<<endl;
for(; ;)
{
cin>>temp;
if(temp==1||temp==2)
break;
else cout<<" 选择错误,请重新选择!"<<endl;
}
if(temp==1)
{
Readfile1(t);
Decoding2(ht,j,t);
}
else if(temp==2)
Decoding(ht,j);
cout<<" **************************************************************************"<<endl;
cout<<" 按enter键返回主菜单"<<endl;
cout.flush();
getchar();
system("cls");
}
}
break;
case 't':
if(m==0&&k==0)
{
j=Fileread(ht);
Disptree(ht,j);
}
else Disptree(ht,j);
cout<<endl<<endl;
cout<<" **************************************************************************"<<endl;
cout<<" 按enter键返回主菜单"<<endl;
cout.flush();
getchar();
system("cls");
break;
case 'p':
cout<<" **************************************************************************"<<endl;
char t[5*Maxsize];
Readfile1(t);
Printcode(t);
cout<<endl;
cout<<" **************************************************************************"<<endl;
cout<<" **************************************************************************"<<endl;
cout<<" 按enter键返回主菜单"<<endl;
cout.flush();
getchar();
system("cls");
break;
default:
cout<<" 输入选择错误!"<<endl;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -