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

📄 doc3.cpp

📁 利用哈夫曼编码构造的完整的编/译码系统
💻 CPP
字号:
/*问题描述
    利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,
	降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码
	,在接收端将传来的数据进行译码。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编/译码系统。
基本要求
    一个完整的系统应具有以下功能:
    (1)I:初始化(Initialization)。从终端读入字符集大小n,
	以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
    (2)E:编码(Encoding)。利用已经建好的哈夫曼树(如不在内存,则从文件hfmTree中读入),
	对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
    (3)D:译码(Decoding)。利用已经建好的哈夫曼树将文件CodeFile中的代码进行译码,
	结果存入文件TextFile中。
    (4)P:打印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。
	同时将此字符形式的编码文件写入文件CodePrint中。
    (5)T:显示哈夫曼树(Treeprinting)。
	将已经在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,
	同时将此字符形式的哈夫曼树写入文件TreePrint中。
*/




#include<iostream.h>
#include"Haff.h"

void menu();//anounce 

void main()
{
	int go_out=1;//标记退出

	int number;
	cout<<"请输入编码个数:";
	cin>>number;
	//输入编码的个数

	HuffManTree hfmtree(number);
	//创建哈夫曼树
	cout<<"现在你可以初使化哈夫曼树了"<<endl;
	cout<<"编码元素是字符型的。如果你输入f3则,f为编码元素3为权值"<<endl;
	hfmtree.initialization();//初始化哈夫曼树
	cout<<"初使化哈夫曼树已经完成,文件hfmTree已在你的硬盘里了"<<endl;
	cout<<"在编码之前请确定ToBeTran文件已存在于你的电脑里了。\a"<<endl;

	char choice;//输入指令载体
	do
	{
		menu();
		cout<<endl<<"请输入选项";
		cin>>choice;

		switch(choice)
		{
		case'e':
		case'E':
			hfmtree.Encoding();
			cout<<"编码完成,文件ToBeTran的编码结果已存入文件CodeFile"<<endl;
			break;
		case'd':
		case'D':
			hfmtree.Decoding();
			cout<<"译码完成,文件TextFile已经在你的硬盘里了"<<endl;
			break;
		case'p':
		case'P':
			hfmtree.Print();
			cout<<endl<<"编码文件已写入CodePrin"<<endl;
			break;
		case't':
		case'T':
			cout<<endl;
			FILE * fp;
			fp=fopen("TreePrint.txt","w");
			hfmtree.printTree(hfmtree.head,0,fp);
			fclose(fp);
			cout<<"打印完成,你可以在文件TreePrin中查看该哈夫曼树"<<endl;
			break;
		case'q':
		case'Q':
			cout<<"你已经成功退出"<<endl;
			go_out=0;
			break;
		default:
			cout<<"没有提供这个选项,请重新输入"<<endl;
		}//匹配指令并调用相应函数
	}while(go_out!=0);
}

void menu()
{
	cout<<"编码译码请输入    :e(E)"<<endl;
	cout<<"译码请输入        :d(D)"<<endl;
	cout<<"打印代码文件请输入:p(P)"<<endl;
	cout<<"打印哈夫曼请输入  :t(T)"<<endl;
	cout<<"退出请输入        :q(Q)"<<endl;
}//菜单函数

⌨️ 快捷键说明

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