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

📄 huffmantree_main.cpp

📁 实现用哈夫曼树进行简单的编码译码功能
💻 CPP
字号:

//程序名:HuffmanTree_Main.cpp 
//程序功能:定义控制台应用程序的入口点
//程序作者:伍世浩 20072102310
//日期:2008.12.11
//文件信息:
//  Huffman.h             哈夫曼树的定义文件
//  HuffmanTree.h         哈夫曼树的实现文件
//  HuffmanTree_Main.cpp  主函数

#include"HuffmanTree.h"


void main()
{

    HuffmanTree mytree;
	int i=0,j=0;
	int choise;
	int finished=1;
	while( finished )
	{
	   ifstream output_code;//输出文件流
	   ofstream io_delete;//清空文件流
       cout<<"---------菜单----------"<<endl;
       cout<<"1,读取默认Huffman树"<<endl;
	   cout<<"2,手动创建哈夫曼树"<<endl;
       cout<<"3,自动创建哈夫曼树"<<endl;
	   cout<<"4,保存当前哈夫曼树"<<endl;
       cout<<"5,读取当前哈夫曼树"<<endl;
	   cout<<"6,用当前树编码"<<endl;
	   cout<<"7,用当前树译码"<<endl;
	   cout<<"8,凹入表示法显示哈夫曼树"<<endl;
	   cout<<"0,退出"<<endl;
	   cin>>choise;
	   if( (choise<0)||(choise>8) )
	   {
		   cout<<"请输入恰当的整数!\n";
		   continue;
	   }
	   switch( choise )
	   {
	   case 1://读取默认Huffman树
		    mytree.ReadDefault( );
			mytree.Build( );
			cout<<"读取信息成功"<<endl;
		   break;
	   case 2://手动创建哈夫曼树
		   cout<<"请输入要创建的哈夫曼树的根字符数(大于0的整数):\n";
		   int num;
		   cin>>num;
		   mytree.Create( num );
		   cout<<"编码成功\n";
		   break;
	   case 3://自动创建哈夫曼树
		   mytree.Auto_Creat( );
		   break;
	   case 4://保存当前哈夫曼树
		   	mytree.WriteFile( );
		   break;
	   case 5://读取当前哈夫曼树
		   mytree.ReadFile( );
		   break;
	   case 6://用当前树编码
		   //首先清除原文件的内容
		   char *data_code[ Max ];//用来保存哈夫曼编码
            io_delete.open( "code.txt" );
			if( !io_delete)
		   {
			   cout<<"不能打开code文件!";
		   }
	        io_delete.close();
		    char data_in[ Max ];//用来保存要传输的字符串
		    char temp;
			cout<<"请输入要编码的字符(输入#号符结束):";
			cin.get();
			cin>>temp;
			i=0;
			while( temp!='#')
			{
                if( temp==' ')
			         temp='*';
		        if( temp=='\n')
			         temp='$';
				data_in[i]=temp;
				i++;
				temp=cin.get();
			}
			int j;
			for( j=0; j<i; j++ )
			{
			   data_code[j]=mytree.Encoder( data_in[j] );//对每个字符调用编码函数,结果保存在data_code中
			}
			cout<<"\n编码成功,得到的哈夫曼码为:"<<endl;
			for( j=0; j<i; j++ )
			{
			   cout<<data_code[j];
			}
			cout<<endl;
		   break;
	   case 7://用当前树译码	   
		   char BiStr[ Max ];
		   output_code.open("code.txt");
		   if( !output_code)
		   {
			   cout<<"不能打开code文件!";
		   }
		    i=0;
			while( !output_code.eof() )//直到文件读取结束
		   {
		     output_code>>BiStr[i];
			 i++;
		   }
		   BiStr[i]='\0';
		   cout<<"经译码,原文字信息为:\n";
		   mytree.Decoder( BiStr );   
		   output_code.close();
           cout<<endl;
		   break;
	   case 8://凹入表示法显示哈夫曼树
		   int T;
		   T= 2*mytree.Get_LeafNum()-2;
		   mytree.Print( T,1 );
		   break;
	   case 0:
		   cout<<"感谢您的使用!\n";
		   finished=0;
		   break;
	   default:
		   break;	    
	   }
}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -