p =ht[p].parent; } co[i] = (char*)malloc((N-start)*sizeof(char)); strcpy(co[i],&cd[start]); printf(\,co[i],i); } if((trans=fopen(\,\))==NULL) { printf(\); exit(0); } fputs(\哈夫曼编码表初始化如下------\\n\,trans); for(i=0;i voidInputHuffmanWord() { FILE *fp; if((fp=fopen(\,\)) == NULL) { printf(\); exit(0); } printf(\请输入以'#'结束的大写字母字符串:\\n\); while(strcmp(word,\)!=0) { fputs(word,fp); gets(word); } fclose(fp); } //选择原码输入类型 voidSelectInputType() { system(\); int point; while(1) { 6 printf(\从键盘键入编码内容\\n\); printf(\从文件中读取编码内容\\n\); printf(\退出\\n\); scanf(\,&point); system(\); switch(point) { case 0:InputHuffmanWord();break; case 1: printf(\将编码内容保存在storeWord.txt文件即可。\\n\); printf(\请进行下一步操作!\\n\); break; case 2:printf(\已经退出输入编码内容。。。\\n\);return ; default:printf(\);break; } } } //编码 voidHuffman_Encod() { int p =M,i,flag; FILE *Input,*Output; charch; if((Output =fopen(\,\)) == NULL) { printf(\); exit(0); } if((Input =fopen(\,\)) == NULL) { printf(\); exit(0); } while(!feof(Output))//遇到输入文件的结束标识 { flag= 0; ch=fgetc(Output); //putchar(ch); for(i=0;i 7 } } if(flag == 0) { fputc('*',Input); } } fclose(Output); fclose(Input); } //译码 voidHuffman_Decod() { FILE *fp,*Input; int p =M,i=0; charch; if((fp=fopen(\,\)) == NULL) { printf(\); exit(0); } if((Input =fopen(\,\)) == NULL) { printf(\); exit(0); } ch=fgetc(fp); while(!feof(fp)) { if(ch=='0') p =ht[p].LChild; elseif(ch=='1') p =ht[p].RChild; elseif(ch=='*') { fputs(\,Input); putchar(ch); } else printf(\); if(ht[p].LChild== 0 &&ht[p].RChild== 0) { fputc(CH[p-1],Input); putchar(CH[p-1]); 8 p = M; } ch=fgetc(fp); } fclose(fp); fclose(Input); printf(\); } //译码与原码比较 voidCompare_word() { char ch_1,ch_2; int flag = 1; FILE *origin,*decod; if((origin =fopen(\,\)) == NULL) { printf(\); exit(0); } if((decod=fopen(\,\)) == NULL) { printf(\); exit(0); } while(!feof(decod)) { ch_1 =getc(decod); ch_2 =getc(origin); if(ch_1 !='*') { if(ch_1 != ch_2) flag= 0; } } fclose(decod); fclose(origin); if(flag == 0) printf(\原码与译码不相符!\\n\); else printf(\原码与译码相符!\\n\); } void main() { int point; 9 } Init_CH(); InitHuffmanCode(); CreateHuffmanCode(); while(1) { printf(\哈夫曼编译器 ******\\n\); printf(\初始化哈夫曼表\\n\); printf(\输入编码内容\\n\); printf(\开始编码\\n\); printf(\开始译码\\n\); printf(\与译码与原码比较\\n\); printf(\退出哈夫曼编译器\\n\); scanf(\,&point); system(\); switch(point) { case 0: printf(\哈夫曼表初始化完成!\\n请进行下一步操作!\\n\); break; case 1: SelectInputType(); break; case 2: Huffman_Encod(); printf(\编码结束!请进行下一步操作!\\n\); break; case 3: Huffman_Decod(); printf(\译码结束!已将译码内容存放storeWord_1.txt!\\n\); printf(\请进行下一步操作!\\n\); break; case 4: Compare_word(); break; case 5: printf(\已经退出编译器。。。\\n\); return ; default:printf(\);break; } } 10