在进行密码破解时有时候需要得到字母出现的频率信息,下面我将简单的使用C语言来读取一个文件,然后统计该文件内的字母出现的频率。

1、在D盘下新建一个文本文件(文件名为"A.txt"),然后在该文件里面保存一些字母。

2、编译并运行程序

C语言源代码:

 #include<stdio.h>
#include<stdlib.h> //统计字母的个数
void CountLetter(FILE *fp, int data[])
{
char ch=fgetc(fp); // 读取文件的第一个字符
while(ch!=EOF) // 当读取到的不是文件结束符EOF则继续读取下一个
{
if(ch>='A' && ch<='Z') // 大写字母转小写
ch+=;
if(ch>='a' && ch<='z') // 统计字母个数
data[ch-'a']++; // 当前字母个数加一
ch=fgetc(fp); // 读取文件的下一个字符
}
} //打印统计字母的结果到屏幕上
void PrintCount(int data[])
{
int i=;
int sum = ; // 字母总的个数 while(i--)
{
sum+=data[i]; // 计算字母的总个数
}
printf("统计字母频率结果(共%d个字母):\n",sum);
for(i=; i<; i++)
{
printf("%c=%.2f%% \t",'a'+i,data[i]*1.0/sum * ); // 输出字母的频率
if( (i+)% == ) // 每输出4个后换一行
printf("\n"); // 换行
}
} int main()
{
FILE *fp; // 文件指针
int data[] = {}; // 字母统计数组 fp=fopen("D:\\A.txt","r"); // 以只读的方式打开文件,如果D盘下没有文件"A.txt"则会打开失败
if(fp==NULL) // 判断文件是否打开成功
{
printf("无法打开文件!\n");
exit(); // 退出程序 需要头文件<stdlib.h>
} CountLetter(fp, data); //统计字母的个数
PrintCount(data); // 打印统计结果 fclose(fp); // 关闭数据文件
return ;
}

注意:在C语言中,我们要输出一个%,则要输两个% (即%%)

最新文章

  1. 关于Thinkcmf中热门文章的使用
  2. 用原生js获取class
  3. access数据库select查询top时无效的解决办法
  4. ImageView中XML属性src和background的区别
  5. HDOJ-三部曲-1002-Radar Installation
  6. oracle记录解锁
  7. LSTM网络(Long Short-Term Memory )
  8. 简单安装python的pip工具模块
  9. 对面试题(剑指offer)产生的一些思考。
  10. Unix命令行学习
  11. ThreadPoolExecutor的一点理解
  12. php中cookie实现二级域名可访问操作的方法
  13. DPDK QoS之分层调度器
  14. 学习Sass之安装篇
  15. bootstrap-datepicker的bug:有日期输入的地方在下个月页面选择当天日期会以当天日期减少一个月显示
  16. gitbook 入门教程之快速体验
  17. 如何清除Windows10中的恢复分区
  18. PAT 1041 考试座位号
  19. spring动态创建数据源
  20. chrome driver 下载

热门文章

  1. 更新引用google的cdn外部jQuery核心库JS文件
  2. Android本地数据存储之SQLite关系型数据库 ——SQLiteDatabase
  3. iOS开发——多线程篇——NSThread
  4. Exploiting the Circulant Structure of Tracking-by-Detection with Kernels(二)
  5. 分享一个快速设置背景的js 自动获取背景图的长宽
  6. QT5笔记:关闭应用程序和窗口的函数
  7. 2 GPS utility methods
  8. td的title属性
  9. splice 很好用
  10. 2小时入门Robot Framework