2017年计算机等级考试成绩查询-2017年计算机等级考试二级C++辅导:C++实现赫夫曼编码/译码器

副标题:2017年计算机等级考试二级C++辅导:C++实现赫夫曼编码/译码器

时间:2023-11-19 17:50:01 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。


  首先,我们来看看main函数:
  void main()
  {
  char choice=' ';
  while(choice!='q')
  { cout<<"\n******************************"<  cout<<" 欢迎使用赫夫曼编码译码系统"<  cout<<"******************************"<  cout<<"(1)要初始化赫夫曼链表请输入'i'"<  cout<<"(2)输入要编码的字符'w'"<  cout<<"(3)要编码请输入'e'"<  cout<<"(4)要译码请输入'd'"<  cout<<"(5)要打印编码请输入'p'"<  cout<<"(6)要打印赫夫曼树请输入't'"<  cout<<"(7)要离开请输入'q'"<  if(flag==0)cout<<"\n请先初始化赫夫曼链表,输入'i'"<  cin>>choice;
  switch(choice)
  {
  case 'i':
  Initialization();
  break;
  case 'w':
  InputCode();
  break;
  case 'e':
  Encoding();
  break;
  case 'd':
  Decoding();
  break;
  case 'p':
  Code_printing();
  break;
  case 't':
  Tree_printing(HT,2*n-1);
  break;
  case 'q':
  break;
  default:
  cout<<"input error"<  }
  }
  free(z);
  free(w);
  free(HT);
  }
  这个函数主要就是和用户交互使用。这个过程我用switch case 来实现,你们也可以选择其他的方式实现如if else ,这个就个人爱好选择。下面我们来看看初始化赫夫曼树的函数Initialization()。
  void Initialization()
  {
  flag=1;
  int num;
  int num2;
  cout<<"下面初始化赫夫曼链表"<  cin>>num;
  n=num;
  w=(int*)malloc(n*sizeof(int));
  z=(char*)malloc(n*sizeof(char));
  cout<<"\n请依次输入"<  char base[2];
  for(i=0;i  {
  cout<<"第"<  gets(base);//这个地方有点小小的问题
  *(z+i)=*base;
  }
  for(i=0;i<=n-1;i++)
  {
  cout<  }
  cout<<"\n请依次输入"<  for(i=0;i<=n-1;i++)
  {
  cout<  cin>>num2;
  *(w+i)=num2;
  }
  HuffmanCoding(HT,HC,w,n);
  //------------------------打印编码-------------------------------------------
  cout<<"字符对应的编码为:"<  for(i=1;i<=n;i++)
  {
  //cout<<"字符"<<*(z+i-1)<<"的编码";
  puts(HC[i]);
  }
  //--------------------------将赫夫曼编码写入文件------------------------
  cout<<"下面将赫夫曼编码写入文件"<  FILE *hfmTree;
  char r[]={' ','\0'};
  if((hfmTree=fopen("hfmTree.txt","w"))==NULL)
  {
  cout<<"can not open file"<  return;
  }
  fputs(z,hfmTree);
  for(i=0;i  {
  fprintf(hfmTree,"%6d",*(w+i));
  fputs(r,hfmTree);
  }
  for(i=1;i<=n;i++)
  {
  fputs(HC[i],hfmTree);
  fputs(r,hfmTree);
  }
  fclose(hfmTree);
  cout<<"已将字符与对应编码写入根目录下文件hfmTree.txt中"<  }

2017年计算机等级考试二级C++辅导:C++实现赫夫曼编码/译码器.doc

本文来源:https://www.wddqw.com/pYrO.html