问题描述
- 霍夫曼树程序,输入字符串统计字符出现次数并译码。请问如何改成从文件读入字符串?
- //生成HuffmanCode文件的两个函数
void HuffmanEncoding(HuffmanTree HTHuffmanCode HC){//根据HuffmanTreeHT求HuffmanCode表HC
int cpi;
char cd[n];
int start;
cd[num] = '';
for(i = 1;i <= num;i++){
start = num;
c = i;
while((p = HT[c].parent) > 0){
cd[--start] = (HT[p].lchild == c)?'0':'1';
c = p;
}
strcpy(HC[i].bits&cd[start]);
HC[i].len = num - start;
}
}void coding(HuffmanCode HCchar *str){//对所代表的字符串进行编码,并写入文件
int ij;
FILE *fp;
fp=fopen(""codefile.txt""w"");
while(*str){
for(i = 1;i <= num;i++){
if(HC[i].ch == *str){
for(j = 0;j < HC[i].len;j++)
fputc(HC[i].bits[j]fp);
break;
}
}str++;
}fclose(fp);
}
//电文的译码
char * decode(HuffmanCode HC){
FILE *fp;
char str[254];
char *p;
static char cd[n+1];
int ijk = 0cjs;
fp = fopen(""codefile.txt""r"");
while(!feof(fp)){
cjs = 0;
for(i = 0;i < num&&cjs == 0&&!feof(fp);i++){
cd[i] = ' ';
cd[i+1] = '';
cd[i] = fgetc(fp);
for(j = 1;j <= num;j++){
if(strcmp(HC[j].bitscd) == 0){
str[k] = HC[j].ch;
k++;
cjs = 1;
break;
}
}
}
}
str[k] = '';
p = str;
return p;
}
//测试主控函数
void main(){
char st[254]*sstr[27];
int cn[27];
HuffmanTree HT;
HuffmanCode HC;
printf(""输入需要编码的字符串(假设均为大写字母):
"");
gets(st);
num = jsq(stcnstr);//统计字符的种类及各类字符出现的频率
CreHuffmanTree(HTHCcnstr);//建立赫夫曼树
HuffmanEncoding(HTHC);//生成赫夫曼编码
coding(HCst);//建立电文赫夫曼编码文件
s = decode(HC);//读编码文件译码
printf(""译码后的字符串:%s
""s);//输出译码后的字符串
printf(""字符串长度:%d
""strlen(s));
}
解决方案
在项目目录下建一个1.txt文件存放字符串,然后运行。
#include <stdio.h>void main(){ char st[254]*sstr[27]; int cn[27]; HuffmanTree HT; HuffmanCode HC;//------------------------------------- FILE *fp=NULL; fp=fopen(""1.txt""r""); if(NULL==fp) { printf(""1.txt打开失败!
""); return ; } fscanf(fp%s""st); fclose(fp);//------------------------------------- //printf(""输入需要编码的字符串(假设均为大写字母):
""); //gets(st); num = jsq(stcnstr);//统计字符的种类及各类字符出现的频率 CreHuffmanTree(HTHCcnstr);//建立赫夫曼树 HuffmanEncoding(HTHC);//生成赫夫曼编码 coding(HCst);//建立电文赫夫曼编码文件 s = decode(HC);//读编码文件译码 printf(""译码后的字符串:%s
""s);//输出译码后的字符串 printf(""字符串长度:%d
""strlen(s));}
解决方案二:
c语言读取txt文件命令
解决方案三:
输入任意字符串,统计字符串中每个字符出现的次数