博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
哈弗曼编码
阅读量:4565 次
发布时间:2019-06-08

本文共 1518 字,大约阅读时间需要 5 分钟。

1 /************************* 2 程序功能:读取一个文本文件的内容并计算里面各种字符出现的次数 3  4 *************************/ 5 #include
6 #include
7 #define MAXLEN 10000 8 9 //结构体用来存放字符的信息10 struct ChNode11 {12 int ascii;13 char ch;14 int count;15 };16 typedef struct ChNode ChNode;17 18 //声明计算字符出现次数的函数19 void Count_Times(char text[],ChNode freq[]);20 int main()21 {22 ChNode freq[256];23 char text[MAXLEN];24 25 Count_Times(text,freq);26 return 0;27 }28 void Count_Times(char text[],ChNode freq[])29 {30 FILE *fp; //指针指向文件31 char chtmp;32 int i;33 34 //给数组初始化35 for(i=0;i<256;i++)36 {37 freq[i].ascii=i;38 freq[i].ch=(char)i;39 freq[i].count=0;40 }41 42 i=0;43 fp=fopen("a.txt","r");44 //读取文件内容并计算字符出现的次数45 while(!feof(fp))46 {47 fscanf(fp,"%c",&chtmp);48 text[i++]=chtmp;49 freq[chtmp].count++;50 }51 fclose(fp);52 53 //将数组信息输出到另一个文件里54 fp=fopen("freq.txt","w");//以a++形式打开文件55 for(i=0;i<256;i++)56 fprintf(fp,"%d %c %d\n",freq[i].ascii,freq[i].ch,freq[i].count);57 fclose(fp);58 59 }

代码43--51行代码用来统计字符出现的次数,此种方法会使得最后一个字符多读一次才能关闭指针,因此最后一个字符会多一次

应改为:

1 i=0; 2     fp=fopen("a.txt","r"); 3     fscanf(fp,"%c",&chtmp); 4     while(!feof(fp)) 5     { 6         text[i++]=chtmp; 7         freq[chtmp].count++; 8         fscanf(fp,"%c",&chtmp); 9     }10     fclose(fp);

将数组信息写入文件时应用“w”,而不用“a+”,后者会不断叠加。

转载于:https://www.cnblogs.com/banshaohuan/p/4459189.html

你可能感兴趣的文章
java生成六位验证码
查看>>
iOS的MVP设计模式
查看>>
stringstream
查看>>
【转】HDU 6194 string string string (2017沈阳网赛-后缀数组)
查看>>
前后端分离
查看>>
存储过程
查看>>
生成器
查看>>
将一个数的每一位都取出来的方法!
查看>>
2) 十分钟学会android--建立第一个APP,执行Android程序
查看>>
面试题8:二叉树下的一个节点
查看>>
hash冲突的解决方法
查看>>
Asp.Net webconfig中使用configSections的用法
查看>>
mysql 二进制日志
查看>>
阻止putty变成inactive
查看>>
TP框架代码学习 学习记录 3.2.3
查看>>
doc文档生成带目录的pdf文件方法
查看>>
js数组,在遍历中删除元素(用 for (var i in arr)是无效的 )
查看>>
通过前端上传图片等文件的方法
查看>>
在 OC 中调用 Swift 代码
查看>>
Android仿腾讯应用宝 应用市场,下载界面, 有了进展button
查看>>