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

📄 哈夫曼编码.cpp

📁 本程序是用哈夫曼树来实现哈夫曼编码译码的。
💻 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 + -