英文文件的压缩和解压缩程序Word下载.doc
- 文档编号:13009753
- 上传时间:2022-10-02
- 格式:DOC
- 页数:17
- 大小:211.50KB
英文文件的压缩和解压缩程序Word下载.doc
《英文文件的压缩和解压缩程序Word下载.doc》由会员分享,可在线阅读,更多相关《英文文件的压缩和解压缩程序Word下载.doc(17页珍藏版)》请在冰豆网上搜索。
达不到文件压缩的目的,所以必须对编码的存储空间进行转换。
3编码转换
在文本文件中字符之间是连续的,所以在文本文件中存储编码也是连续的。
可以把连续的不同字符的编码存入同一个字节,再把这一个字节的二进制码转换成一个字符,把转换后的字符存储在文本文件中。
二、数据结构的选择和概要设计:
1此程序采用的数据结构为顺序表。
哈夫曼树是二叉树的一种,二叉树的顺序存储结构中可以把结点间的关系放在其存储位置中,无需附加任何信息就能在这种结构中找到每个结点的双亲结点和孩子结点,这正是哈夫曼编码所需要的。
哈夫曼树顺序表:
结构体header[512],表中每个结点包括以下信息
unsignedcharb
字符名
longcount
在文件中出现次数
longparent
父结点
Longlch
左孩子结点
Longrch
右孩子结点
charbits[256]
字符编码
压缩文件
new1.txt
解压后
New2.txt
原文件
new.txt
Compress
Uncompress
内容相同
图1程序的实现过程
表1程序中所包括的函数及其功能
函数名
所实现的功能
compress()
实现文件压缩(被主函数调用)
uncompress()
实现文件解压缩(被主函数调用)
huffman()
对文件中出现的字符进行编码(被以上两函数调用)
Main()
compress
huffam
uncompress
图2程序模块间的调用关系
2、算法流程
(假如原文件中只有一句话Iamhere)
1)压缩过程(主函数调用compress()函数)
扫描文档知alcount=9n=6
权值:
count表2利用权值进行编码
e
I
a
m
h
r
count
2
2
1
1
1
parent
10
7
8
8
9
bits
11
0000
0001
010
011
001
4
2
3
5
9
图3进行哈夫曼树的构造
12
86
227
0
因为八位的二进制码转化为的整数完全可以用ASCLL码值对应的字符来代替
在原文件(new.txt)中一共占用了9个字节,而如果按上图的存储方式存入文件则只要4个字节
2)解压缩过程
把以字符的形式存储在文件(new1.txt)中的编码还原
依次把还原后的存储编码与字符的编码比较,若相同则把字符写入文件(new2.txt)
图4哈夫曼编码的还原过程
二、详细设计和编码
1.要完成对文件的压缩和解压缩,首先要建立哈夫曼编码的算法,而要建立哈夫曼编码的算法,就要定义哈夫曼树采用的顺序表结构
以下是基本的数据结构的定义
哈夫曼树采用顺序表的结构
structhead{//结构体
unsignedcharb;
//存储字符
intcount;
//权值
longparent,lch,rch;
charbits[256];
//编码
}header[512],tmp;
2.//文件压缩过程
a.要实现文件的压缩过程,首先要从文本中读入一个字符,若读入的是哈夫曼树中的第i个字符,则把第i个字符的编码接在之前定义过的字符串buf的未尾
Buf[0]=0;
while(q!
=alcount)
{
fread(&
c,1,1,ifp);
//从文本中读入一个字符
q++;
for(i=0;
i<
n;
i++)//n为不重复计数的所有字符数
if(c==header[i].b)break;
//如果读入的是哈夫曼树中的第i个字符
strcat(buf,header[i].bits);
//把第i个字符的编码接在字符串buf的末尾
j=strlen(buf);
b.当字符串buf的长度大于或等于8时,把前8位的编码转化为整数,之后再把这个整数强制转化为字符串并写入压缩文件,最后把已经写入文件的编码从buf中去掉
while(j>
=8)//当字符串buf的长度大于或等于8时
{
f=0;
for(p=7;
p>
=0;
p--)//把前8位的编码转化为整数(调用了
if(buf[p]=='
1'
)shuxue函数求2的次方)
f=shuxue(7-p)+f;
c=(unsignedchar)f;
//把这个整数变为字符串
fwrite(&
c,1,1,ofp);
//写入压缩文件
pt1++;
strcpy(buf,buf+8);
//把已经写入文件的编码从buf中去掉
j=strlen(buf);
//j用来统计字符串的长度
}
}
c.当buf中最后的字符串小于8位时,把它变成整数,转化为字符写入压缩文件,英文文本文件正文内容写入文件后,还必顺把字符的基本信息(字符名,权值)写入压缩文件,以便文件的解压缩。
if(j>
0)//当buf中最后的字符串小于8位时
f=0;
for(p=j-1;
p--)//把它变成整数,转化为字符写入压缩文件
if(buf[p]=='
)
f=shuxue(j-p-1)+f;
c=(unsignedchar)f;
fwrite(&
pt1++;
在解压缩前必顺依靠字符的权值班重新对字符进行哈夫曼编码(调用huffman函数)
3.文件的解压缩过程
a.若要实现文件的解压缩,在解压缩前必顺依靠字符的权值班重新对字符进行哈夫曼编码(调用huffman函数),首先定义一个字符串,当字符串bx的长度小于p时,从压缩文件读入一字符(8位),并把字符转化为整数,之后再把整数转化为二进制码的字符串存入字符串buf,统计字符串buf的长度,如果小于8位,则给编码补零,并把字符串buf接在字符串bx末
abx[0]=0;
while
(1)
{
while(strlen(bx)<
(unsignedint)p)//p为编码最长的字符的编码长度
{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 英文 文件 压缩 和解 程序