资源简介

利用赫夫曼编码对字符文件进行加密,可以对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

评论

共有 条评论