资源简介
利用赫夫曼编码对字符文件进行加密,可以对txt字符文件进行加密,由于满足课程设计,所以加密功能简单,但是赫夫曼为核心代码,是单独函数分开的,用于学习赫夫曼算法是简单的,并附有解释。
代码片段和文件信息
#include
#include
#include
#include
typedef struct{
int weight;
int parentlchildrchild;
}HTNode; //构造赫夫曼树结点的结构体
typedef struct{
HTNode *HTN; //存储编码的各个字符
int length; //需编码字符个数
int size; //赫夫曼编码总容量
}HuffmanTree; //构造赫夫曼树的结构体
typedef struct{
char *ch; //存放需要编码的原始字码
int *in; //存放各个字码的权值
}Weight;
char Code[27][26]; //存放各个字符的赫夫曼编码01
int Code_N[30]; //存放各个字符对应编码01的个数,用于输出控制
//输出菜单列表
void showMenu();
//对赫夫曼树结构初始化
void Init_HuffmanTree(HuffmanTree &HWeight S);
//对编码个数和权值的结构初始化
void Init_Weight(Weight &Sint msizeint msize1);
//求出输入字符串各个字符的权值
void WeightNumber(Weight &S);
//选择parent=0且权值较小的两个HTnode
void select(HuffmanTree Hint jint a[]);
//创建赫夫曼树
void creat_HuffmanTree(HuffmanTree &H);
//赫夫曼编码
void creat_HTCode(HuffmanTree HWeight S);
//赫夫曼解码
void explain_HTCode(HuffmanTree HWeight S);
/*对指定文件进行加密*/
void encryptFile(Weight S);
/*对指定文件进行解密*/
void deencryptFile(HuffmanTree HWeight S);
/*用于读出文件中所储存的全部信息*/
void my_readFile();
//主函数实现赫夫曼树
void main()
{
HuffmanTree h;
Weight s;
Init_Weight(s5050);
char choose=‘\0‘yes_no=‘\0‘ch;
do
{
showMenu();
printf(“ 选择: “);
cin>>choose;
switch(choose)
{
case‘1‘: {WeightNumber(s);
}break;
case‘2‘: {Init_HuffmanTree(hs);
creat_HuffmanTree(h);
}break;
case‘3‘: {creat_HTCode(hs);
}break;
case‘4‘: {explain_HTCode(hs);
}break;
case‘5‘: {encryptFile(s);
}break;
case‘6‘: {deencryptFile(hs);
}break;
case‘7‘:{my_readFile();
}break;
case‘8‘: {exit(0);
}break;
case‘0‘: {
//对26个字符设置给定的权值
s.ch[1]=‘e‘;s.ch[2]=‘a‘;s.ch[3]=‘r‘;s.ch[4]=‘i‘;s.ch[5]=‘o‘;
s.ch[6]=‘t‘;s.ch[7]=‘n‘;s.ch[8]=‘s‘;s.ch[9]=‘l‘;s.ch[10]=‘c‘;
s.ch[11]=‘u‘;s.ch[12]=‘d‘;s.ch[13]=‘p‘;s.ch[14]=‘m‘;s.ch[15]=‘h‘;
s.ch[16]=‘g‘;s.ch[17]=‘b‘;s.ch[18]=‘f‘;s.ch[19]=‘y‘;s.ch[20]=‘w‘;
s.ch[21]=‘k‘;s.ch[22]=‘v‘;s.ch[23]=‘x‘;s.ch[24]=‘z‘;s.ch[25]=‘j‘;
s.ch[26]=‘q‘;
s.in[1]=57;s.in[2]=43;s.in[3]=39;s.in[4]=38;s.in[5]=37;
s.in[6]=35;s.in[7]=34;s.in[8]=29;s.in[9]=28;s.in[10]=23;
s.in[11]=19;s.in[12]=17;s.in[13]=16;s.in[14]=15;s.in[15]=15;
s.in[16]=13;s.in[17]=11;s.in[18]=9;s.in[19]=9;s.in[20]=7;
s.in[21]=6;s.in[22]=5;s.in[23]=1;s.in[24]=1;s.in[25]=1;
s.in[26]=1;s.in[0]=26;
FILE *fp;
if((fp=fopen(“original.txt““w“))==NULL){ //打开文件
printf(“文件不能打开“);
exit(1);
}
for(int i=1;i<=26;i++){
fprintf(fp“%c %d “s.ch[i]s.in[i]);
}
fclose(fp);
}break;
cout<<“\n\n\n\t\t\t确定退出(Y||N)“;
cin>>ch;
if(c
- 上一篇:C++实现日志库
- 下一篇:MFC实现简单网络聊天程
相关资源
- 学生社团管理系统数据结构课程设计
- 简单电子英汉词典c++
- 数据结构课程设计-班级通讯录
- AES密码学课程设计带报告
- c++学生信息管理系统附带报告
- 课程设计哲学家就餐问题报告+代码
- 路由器分组转发算法_计算机通信课程
- 操作系统课程设计 文件管理 C C++
- C语言课程设计—图书信息管理系统
- C+++课程设计+扫雷系统+报告+源代码
- 操作系统课程设计——多线程同步演
- 赫夫曼编码(C语言编写
- 任意长的整数加法 课程设计
- c++ c 数据结构 课程设计 学生成绩管理
- 人事管理系统C语言课程设计报告
- C语言课程设计 - 学生宿舍管理系统
- C++实现排课程序
- C语言课程设计——超市商品库存管理
- c语言课程设计报告 计算器的实现内
- 数据结构课程设计 带括号的算术表达
- 操作系统课程设计银行家算法C语言
- 客房管理系统的C++课程设计
- 商品销售统计的C++课程设计
- 学生社团管理程序 c++ 课程设计
- C++ 停车场管理 数据结构 课程设计
- 分数计算器课程设计
- 人事管理系统(使用MFC单文档程序,
- c语言课程设计之网络购物系统
- 《C++面向对象程序设计》课程设计—
- 单片机简易计算器的设计包含设计报
评论
共有 条评论