⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 huffcode.cpp

📁 使用vc++编写的一个实现huffman编码的程序
💻 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 + -