void decode(){ //选择译码方式 int sel=0; for(;;){
if(!HT) {cout<<\对不起,哈夫曼树不存在!请先建立哈夫曼树。\ cout<<\ cout<<\ \要译码的文件来源\\t\\t\\t\\t\\t*\
cout<<\使用已有文件CodeFile.txt进行译码\\t\\t*\ cout<<\自行输入文件进行译码\\t\\t\\t\\t*\ cout<<\返回上层\\t\\t\\t\\t\\t*\
cout<<\ cout<<\请输入您的选择\ \ cin>>sel;
if(sel==3) break; switch(sel)
{case 1:openfileDeco();break; case 2:inputDeco();break;
default:cout<<\对不起,您输入的数据有误!请重新输入。\ } }
void inputDeco(){ //通过手动输入的方式进行译码 int m=2*n-1;
char *password=(char *)malloc(200*sizeof(char)); cout<<\ 请输入要译码的文件(以$结束)\
for(int i=1;i<200&&password[i-1]!='$';i++) cin>>password[i]; if(i==200) {
password=(char *)realloc(password,(200+80)*sizeof(char)); for(;i<280&&password[i]!='$';i++) cin>>password[i]; }
cout<<\译码结果为(#代表空格)\ //outstuf.close();
outstuf.open(\ for(i=1;password[i]!='$';){ char record[20];
for(int j=0,q=i;password[q]!='$';j++,q++){
if(password[q]=='0') {record[j]='0';m=HT[m].lchild;} else {record[j]='1';m=HT[m].rchild;}
if(HT[m].rchild==0) {record[j+1]='\\0';break;} }
if(HT[m].rchild!=0) {cout< for(int p=1;p<=n;p++){ if(!strcmp(record,HC[p])) {outstuf< } i=i+strlen(record); m=2*n-1; } cout< void openfileDeco(){ //通过打开文件CodeFile.txt的方式进行译码 int m=2*n-1; cout<<\ CodeFile.txt文件内容如下:\ ifstream infile(\ if(!infile){ cerr<<\ exit(1); } char *password=(char *)malloc(200*sizeof(char)); for(int i=1;infile.eof()==0&&i!=200;i++){ infile>>password[i]; cout< password=(char *)realloc(password,(200+80)*sizeof(char)); for(;infile.eof()==0&&i!=280;i++){ infile>>password[i]; cout< password[++i]='$'; cout< cout<<\译码结果为(#代表空格)\ //outstuf.close(); outstuf.open(\ for(i=1;password[i]!='$';){ char record[20]; for(int j=0,q=i;password[q]!='$';j++,q++){ if(password[q]=='0') {record[j]='0';m=HT[m].lchild;} else {record[j]='1';m=HT[m].rchild;} if(HT[m].rchild==0) {record[j+1]='\\0';break;} } if(HT[m].rchild!=0) {cout< for(int p=1;p<=n;p++){ if(!strcmp(record,HC[p])) { outstuf< i=i+strlen(record); m=2*n-1; } cout< void dispHT( HuffmanTree nodeRoot, int level ) {//以缩进方式输出哈夫曼树 if(HT==NULL) return; if(nodeRoot->rchild) { dispHT(HT+nodeRoot->rchild,level+1); } for(int i=0;i dispHT(HT+nodeRoot->lchild,level+1); } } int main(){ int sel=0; cout<<\欢迎使用哈夫曼编码/译码器<-\ for(;;){ cout<<\ cout<<\构建哈夫曼树\\t\\t\\t\\t\\t*\ cout<<\输出哈夫曼树\\t\\t\\t\\t\\t*\ cout<<\编码\\t\\t\\t\\t\\t\\t*\ cout<<\译码\\t\\t\\t\\t\\t\\t*\ cout<<\退出\\t\\t\\t\\t\\t\\t*\ cout<<\ cout<<\请输入您的选择(1-5)\ \ cin>>sel; if(sel==5) break; switch(sel) {case 1:initHuffmanTree();break; case 3:encoding();break; case 2:{if(HC==NULL) cout<<\对不起,哈夫曼树不存在!请先建立哈夫曼树。\ else {outstuf.open(\ dispHT(HT+2*n-1,1);outstuf.close();}break;} case 4:decode();break; default:cout<<\对不起,您输入的数据有误!请重新输入。\ } } outstuf.close(); cout<<\感谢使用本系统!--------------------------------\ return 0; }
相关推荐: