用C++编写的文件压缩解压程序.docx
《用C++编写的文件压缩解压程序.docx》由会员分享,可在线阅读,更多相关《用C++编写的文件压缩解压程序.docx(25页珍藏版)》请在冰豆网上搜索。
用C++编写的文件压缩解压程序
//-----------------------------------------------------------------------------
//huffmantreemain.cpp
//主界面
#include"huffmantree.h"
#include
#include
#include"compress1.h"
#include"Ceshi.h"
voidmenu()
{
cout< cout<<"\t\t ***操作菜单***\n\n";
cout<<"\t\t\t1压缩文件\n";
cout<<"\t\t\t2解压文件\n";
cout<<"\t\t\t3测试\n";
cout<<"\t\t\t0退出\n\n\n\n";
return;
}
intmain()
{
charmeiyong;
cout<<"\n\n\n\n\n\n\n\n\n"
<<"\t &*************** 压缩软件 **************&\n"
<<"\t * *\n"
<<"\t * *\n"
<<"\t * *\n\n\n"
<<"\t * 运行本软件之前,请务必仔细阅读使用指南 *"
<<"\n\n\n\n\n\n\n\n\n\n";
cin.unsetf(ios:
:
skipws);
cin>>meiyong;
cin.setf(ios:
:
skipws);
ifstreamfin("使用说明.txt",ios:
:
binary);
fin.unsetf(ios:
:
skipws);
while(fin>>meiyong)
{
cout< }
cout< getch();
fin.setf(ios:
:
skipws);
fin.close();
cout<<"\n\n\n\n\n\n";
cout<<"\n";
cout<<"\t\t*-------------------------------------------*\n";
cout<<"\t\t* 实验六:
霍夫曼树的应用 *\n";
cout<<"\t ******* *******\n";
cout<<"\t\t* 作者:
gdgzzch 学号:
15201314 *\n";
cout<<"\t\t*-------------------------------------------*\n\n";
cout<<"\t\t 2005.11.16\n\n";
menu();
intchoice;
cout<<"请选择操作:
";
cin>>choice;
while
(1)
{
switch(choice)
{
case1:
Compress();
break;
case2:
Decompress();
break;
case3:
Ceshi();
break;
case0:
cout<<"\n\n\t\t********* 谢谢您使用本软件,再见!
***********\n\n\n\n";
return1;
default:
cout<<"无此操作!
\n\n";
}
cout<";
cin>>choice;
}
return1;
}
//----------------------------------------------------------
//compress1.h
//压缩
#ifndefCOMPRESS
#defineCOMPRESS
#include"huffmantree.h"
#include
#include
#include
#include
//压缩函数
voidCompress()
{
unsignedcharch;
inti,j,k;
intCharnum[256];//
unsignedcharChars[256]; //与下面共同使用,记录字符
intCharnums[256]; //记录对应字符的个数
intCharKinds; //字符种数
char[21]; //文件名不超过20个字符源文件名
char[21]; //目标文件名
int;//源文件大小
int;//压缩文件大小
HuffmanTreeht;
CharNameNodeNameNode[256]; //存储字符对应的霍夫曼编码
BinTreeNode*btn=NULL;
Code*first=NULL;
Code*last=NULL;
ifstreamfilein;
ofstream;
cout<<"请输入你要压缩的文件的名字:
";
cin>>;
(); //open:
if(!
filein)
{
cout<<<<"不存在!
\n";
();
return;
}
cout<<"请输入你的压缩文件的名字(*.HFM):
"; //以后再用
cin>>;
char[5];
intlen;
len=strlen();
if(len<=4)
{
cout<<<<"文件的扩展名必须为HFM\n";
return;
}
for(i=len-1,j=3;i>=len-4;i--,j--)
[j]=[i];
[4]='\0';
if(strcmp(,".HFM")!
=0)
{
cout<<<<"文件的扩展名必须为HFM\n";
return;
}
// ******************************************************
for(i=0;i<256;i++)
{
Charnum[i]=0; //记录每一个字符的个数
Charnums[i]=0; //记录字符Char[i]的个数
}
(ios:
:
skipws);
; //计算源文件大小
while(filein>>ch)
{
Charnum[unsignedint(ch)]++; //统计每种字符的频数
;
}
(ios:
:
skipws);
(); //close:
// ******************************************************
j=0;
for(i=0;i<256;i++)
{
if(Charnum[i])
{
Chars[j]=unsignedchar(i); //统计源文件中存在的字符的
Charnums[j]=Charnum[i];
j++;
}
}
CharKinds=j;
// ******************************************************
;//计算压缩文件大小
();
<<'0'<<''; //非法位数(之后修改)
<<<<'';
< ;
for(i=0;i {
< ;