博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【软件开发综合实验】文本压缩软件
阅读量:7210 次
发布时间:2019-06-29

本文共 2067 字,大约阅读时间需要 6 分钟。

使用哈夫曼编码对文本文件进行压缩。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef unsigned char uc;typedef unsigned long long ull;string s2;vector
G[512];//用vector存储哈夫曼树typedef vector
::iterator ITER;string anss[256];typedef pair
data;//堆中存储的数据类型为pair
#define N 1000000uc sp[N+5];int lenp;char s[N+5],table[256];int n,m;int cnts[256];//记录各字符出现频率int ReadIn(FILE* fp);//读入文本文件,返回其总长度void Freq_stats();//统计各字符出现频率void dfs(int U,string s);//深度优先遍历哈夫曼树,生成每个字符的哈夫曼编码void HuffmanCoding();//用堆实现哈夫曼编码主过程int main(){ int op; char ch; while(1){ system("cls"); printf("请输入对应数字选择您想要的功能:\n"); printf("1.压缩当前目录下的test.txt文件到test.comp,并且输出各字符出现频率以及编码表。\n"); printf("2.解压当前目录下的test.comp文件,并且输出原文本到test2.txt。\n"); printf("3.退出程序。\n"); scanf("%d",&op); if(op==1){ FILE* fp=fopen("test.txt","r"); n=ReadIn(fp); puts(""); fclose(fp); Freq_stats(); puts(""); HuffmanCoding(); puts(""); fp=fopen("test.comp","wb"); s2.clear(); for(int i=0;i
ma; for(int i=1;i<=m;++i){ fread(x,sizeof(char),1,fp); fread(tlen,sizeof(char),1,fp); fread(y,sizeof(ull),1,fp); string ts=""; for(int j=tlen[0]-1;j>=0;--j){ ts+=(char)((y[0]>>j)&1); } ma[ts]=x[0]; } memset(sp,0,sizeof(sp)); fread(sp,sizeof(uc),N,fp); fclose(fp); string now=""; FILE* fp2=fopen("test2.txt","w"); int nn; for(int i=N+4;i>=0;--i){ if(sp[i]){ nn=i; break; } } puts("解压后的原文本为:"); for(int i=0;i
>(lim-1-j))&1); if(ma[now]){ putchar(ma[now]); fprintf(fp2,"%c",ma[now]); now.clear(); } } } fclose(fp2); puts(""); printf("按任意键继续"); while(!kbhit()); ch=getch(); if(ch==-32){ getch(); } } else{ break; } } return 0;}int ReadIn(FILE* fp){ int len=0; while(!feof(fp)){ fgets(s+len,N,fp); len+=strlen(s+len); } puts("原文本:"); puts(s); return len;}void Freq_stats(){ m=0; memset(cnts,0,sizeof(cnts)); for(int i=0;i
,greater
>Heap; for(int i=0;i<256;++i){ if(cnts[i]){ Heap.push(make_pair(cnts[i],i)); } } for(int i=1;i

转载于:https://www.cnblogs.com/autsky-jadek/p/8151008.html

你可能感兴趣的文章
Dockerfile详解(三)
查看>>
python 气质
查看>>
pop3
查看>>
stm32 IAP + APP ==>双剑合一
查看>>
使用SqlBulkCopy类实现导入excel表格
查看>>
React全家桶写一个CNode社区,奉上心得与源码
查看>>
全局替换字体,开源库更方便!!!
查看>>
Spring Cloud构建微服务架构:消息驱动的微服务(消费分区)【Dalston版】
查看>>
数据库路由中间件MyCat - 使用篇(4)
查看>>
JavaScript 异步队列实现及拓展
查看>>
三个白帽之从pwn me调试到Linux攻防学习
查看>>
JIT引擎触发RowHammer可行性研究
查看>>
朴素贝叶斯算法文本分类原理
查看>>
笔记-GPUImage(二)图片滤镜
查看>>
Spark综合使用及用户行为案例页面转化率统计分析实战-Spark商业应用实战
查看>>
Exchange 2013 创建新用户
查看>>
mikrotik NAT设置(winbox)
查看>>
mysql5.5主从同步复制配置
查看>>
Press(del)Enter BIOS Setup,<F12>Display Boot Menu
查看>>
Exchange 2016和 O365 混合部署系列二之Azure AD Connect同步工具部署
查看>>