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

📄 main.cpp

📁 利用霍夫曼树进行文件压缩和解压
💻 CPP
字号:
# include <iostream>
# include "minheap.h"
# include "huffmantree.h"
# include "coding.h"
# include "fstream"

using namespace std;

int main(){


	cout<<"**********************************************************************\n"
		<<"姓名:XXX   学号:??????   实验五:huffman编码&文件压缩解压\n"
		<<"**********************************************************************\n\n"
		<<"欢迎进入本压缩测试系统\n"<<endl;
	int flag,flag0;
	do{
		cout<<"\n输入1:键盘输入报文文本,进行Huffman编码&解码\n"
			<<"输入2:压缩文件\n"
			<<"输入3:解压HJM文件\n"
			<<"输入0:离开系统\n"<<endl;
		cin>>flag;
		system("cls");
		switch(flag)
		{
		case 1:{Coding one;
loop:		   cout<<"\n键盘输入报文文本,进行Huffman编码&解码\n"<<endl;
			   cout<<"请输入报文文本(长度不超过500字符)"<<endl;
			   char text[501];
			   cin.ignore(1);
			   cin.getline(text,500);
			   
			   one.setstrkey(text);
			   cout<<"报文编码为:";
			   one.printcode(text);
			   do{cout<<endl<<"请选择下列操作:\n"
				   <<"输入1:利用现有的Huffman编码对新报文进行编码\n"
				   <<"输入2:利用现有的Huffman编码对报文码进行解码\n"
				   <<"输入3:重新设置Huffman编码\n"
				   <<"输入0:离开"<<endl;
			       cin>>flag0;
				   system("cls");
				   switch(flag0){
				   case 1:cout<<"请输入新报文文本(长度不超过500字符)"<<endl;	
					      cin.ignore(1);
			              cin.getline(text,500);
                          cout<<"报文编码为:";
			              one.printcode(text);
                          break;
				   case 2:{cout<<"请输入huffman编码(长度不超过500字符)(只含0或1)"<<endl;	
					      cin.ignore(1);
			              cin.getline(text,500);
                          cout<<"报文原码为:";
						  one.decode(text,cout);
						  if(strlen(text)) cout<<"最后多出的"<<text<<"码没找到相应的原码,输入有误~"<<endl;
						  break;}
				   case 3:goto loop;break;
				   case 0:break;
				   default:cout<<"error!"<<endl;break;
				   }
				   cin.clear();
			   }while(flag0);
			   
				break;
			   }

		case 2:{cout<<"\n欢迎使用本系统压缩文件\n"<<endl
				   <<"请输入需要压缩的文件名(包括路径)(格式:E:\\1.txt)"<<endl;
			    char fi0[15],fi1[6],fi[20];
				cin.ignore(1);
				cin.get(fi0,15,'.');
				cin>>fi1;
				char fo[20] ;
				fo[0]='\0';fi[0]='\0';
				strcat(fi,fi0);
				strcat(fi,fi1);
				strcat(fo,fi0);
				strcat(fo,".HJM");
				cout<<"使用默认压缩文件名(包括路径)"<<fo<<"?(Y or N)"<<endl;
				char c;
				cin.ignore(1);
				cin.get(c);
				if(c=='N' || c== 'n'){
					cout<<"请输入压缩文件名(包括路径):";
					cin>>fo;
				}
				Coding two;
				int fisize = two.setfilekey(fi);
				int hsize;
				if(!(hsize = two.compress(fi,fo)))
				   cout<<"压缩失败"<<endl;

				break;
			   }

		case 3:{
			 Coding three;
			 cout<<"\n欢迎使用本系统解压HJM文件"<<endl
				   <<"请输入需要解压的文件名(包括路径)(格式:E:\\1.HJM)"<<endl;
			    char fi[20];
				cin>>fi;
				if(!three.decompress(fi )) cout<<"解压失败"<<endl;
				break;
			   }

		case 0:cout<<"-----------------------------------------------------\n"
				   <<"\n离开本系统...\n欢迎再次使用~\n"<<endl;break;
		default:cout<<"\n输入有误,请重新输入\n";break;
		}
	cin.clear();
	}while(flag);


	system( "pause" );

	return 0;
}

⌨️ 快捷键说明

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