📄 huffcode.cpp
字号:
#include<iostream.h>
#include"Sethuff.h"
#include"Setfile.h"
#include<fstream.h>
///////////////////////////////////////////
void main()
{
char *a,c1,c2;
unsigned int *table;
int nb;
int na=1;
a=new char[1024];
ifstream in1,in2;
cout<<"**********************************************\n"
<<"****Huffman编码解码器*************************\n"
<<"****功能简介: ********\n"
<<"*****1、从外存导入文件或直接输入字符 ********\n"
<<"*****2、对文件中的字符进行统计 ********\n"
<<"*****3、根据统计结果建立Huffman树 ********\n"
<<"*****4、实行Huffman编码显示个字符码值 ********\n"
<<"*****5、对外存导入或直接输入的码值解码********\n"
<<"*****6、解码结果存入指定文件 ********\n";
cout<<"**********************************************\n";
cout<<endl;
while(na)
{
cout<<"是否继续功能调用?(是'1'//否'非1数字')"<<endl;
cin>>na;
if(na!=1)break;
/////////////////////文件转化显示在屏幕上////////////
lp1: cout<<"是否从外存导入文件?(是y/n否):";
cin>>c1;
switch(c1)
{
case 'y':cout<<"输入路径(以txt结尾):";
cin>>a;
in1.open(a);
in1>>a;
in1.close();
cout<<"文件中的字符是:"<<a<<endl;
break;
case 'n':cout<<"请输入符号序列:"<<endl;
cin>>a;
break;
default:cerr<<"无效操作,请重新输入!";
goto lp1;
}
//////////////////字符统计/////////////////////////////
Setfile bb(a);
bb.Culculate();
table=bb.getnum();
nb=bb.getj();
a=bb.getstr();
if(nb==1)
{
cout<<"仅有一个字符,不合要求,";
cout<<"请重新输入!";
goto lp1;
}
else
{
int nn=0;
for(int ji=0;ji<nb;ji++)
nn+=table[ji];
cout<<"文件中共有字符数为: "<<nn<<endl;
//////////////// Huffman树的建立///////////////////////
cout<<"各种字符及其个数如下: "<<endl;
Sethuff h1(nb,table,a);
cout<<"建立Huffman树……"<<endl;
h1.Setting();
cout<<"建立完成!"<<endl;
//////////////////////编码//////////////////////////
cout<<endl;
cout<<"以上文件对应的Huffman编码是:"<<endl;
for(int ii=0;ii<nb;ii++)
h1.inorder(a[ii]);
cout<<"存储编码到'code.txt'成功!";
////////////////////解码//////////////////////////////
cout<<endl;
char *code;
int len;
code=new char[1024];
lp2: cout<<"是否从外存导入码值?(是y/n否):";
cin>>c2;
switch(c2)
{
case 'y':cout<<"输入路径(以txt结尾):";
cin>>code;
in2.open(code);
in2>>code;
in2.close();
cout<<"文件中的码值是:"<<code<<endl;
break;
case 'n':cout<<"请输入你要解的码制(由0和1组成):"<<endl;
cin>>code;
break;
default:cerr<<"无效操作,请重新输入!";
goto lp2;
}
len=strlen(code);
for(int k=0;k<len;k++)
if(code[k]!='1'&&code[k]!='0')
{
cout<<"输入的码值不合要求!";
code=NULL;
goto lp2;
}
cout<<"编码结果是: ";
h1.explain(code);
}
}
cout<<"谢谢使用!\n";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -