统计英文文章中各单词的频率,打印频率最高的十个单词(C语言实现)
一、程序思路及相关代码
首先打开文件,代码如下
FILE *fp;
char fname[10];
printf("请输入要分析的文件名:\n");
scanf("%s",fname);
if((fp=fopen(fname,"r"))==NULL){ //读取文件内容,并返回文件指针,该指针指向文件的第一个字符
fprintf(stderr,"error opening.\n");
exit(1);
}
对于文件的扫描,以字符为单位
do{
ch=fgetc(fp);
if(ch==' '||ch==','||ch=='.'||ch==';') //如果是空格,自动跳到下个字符
scanner(fp);
else{
fseek(fp,-1,1); //如果不是空格,则回退一个字符并扫描
scanner(fp);
}
}while (ch!=EOF);
要统计单词频率,首先要将文章分为单个单词
int zimu(char ch){
if((ch >= 'A' && ch <= 'Z')
|| (ch >= 'a' && ch <= 'z'))
return ch;
else
return 0;
}
void scanner(FILE *fp)
{
char b[20];
ch=fgetc(fp);
if(zimu(ch))
{ //判断该字符是否是字母
b[0]=ch;
ch=fgetc(fp); //调用函数扫描字符
i=1;
while(zimu(ch))
{
b[i] = ch;
i++;
ch = fgetc(fp);
}
fseek(fp,-1,1);
b[i] = '\0';
k++;
strcpy(w[k].c,b);
}
}
对于单词,为单词创建结构体
struct word
{
char c[];//单词词组
int n;//单词个数
}w[];
统计各个单词的个数
for(i=1;i<k+1;i++)
w[i].n=1;
for(i=1;i<k+1;i++)
{
for(j=i+1;j<k+1;j++)
{
if(strcmp(w[i].c,w[j].c)==0)
{
w[i].n++;
w[j].n=0;
}
if(w[i].n==0)//将已统计的单词跳过
break;
}
}
将单词按个数多少进行排序
for(i=;i<k+;i++)
{
for(j=;j<k+-i;j++)
{
if(w[i].n>w[j].n)//交换结构体内数据
{
t=w[i].n;
strcpy(a,w[i].c);
w[i].n=w[j].n;
strcpy(w[i].c,w[j].c);
w[j].n=t;
strcpy(w[j].c,a);
}
}
}
printf("英文文章中频率最高10个单词及个数为:\n");
for(i=;i<;i++)
printf("%d: %s %d\n",i,w[i].c,w[i].n);
}
二、遇到问题
(1)对于单词的扫描,后来查看编译中的词法分析解决了
(2)对于词组的复制,使用strcpy(w[k].c,b);解决将词组c复制到结构体数组中
(3)对于单词个数统计,
if(w[i].n==)//将已统计的单词跳过
break;
将与后面单词相同的跳过,避免出现重复
三、程序过程统计
二月26号下午,2个小时思考程序思路,并书写大体框架
二月27号上机时间,将扫描和单词分解完成
二月27号完成程序
四、程序运行截图

统计英文文章中各单词的频率,打印频率最高的十个单词(C语言实现)的更多相关文章
- C++语言,统计一篇英文文章中的单词数(用正则表达式实现)
下面的例子展示了如何在C++11中,利用regex_search()统计一篇英文文章中的单词数: #include <iostream> #include <regex> #i ...
- Linux作业(三)-shell统计某文章中出现频率最高的N个单词并排序输出出现次数
Linux课上的作业周三交,若有考虑不周到的地方,还请多多不吝赐教. shell处理文本相关的经常使用命令见此博客 # #假设输入两个參数 则第一个为统计单词的个数.第二个为要统计的文章 #假设输入一 ...
- python统计英文文本中的回文单词数
1. 要求: 给定一篇纯英文的文本,统计其中回文单词的比列,并输出其中的回文单词,文本数据如下: This is Everyday Grammar. I am Madam Lucija And I a ...
- C#统计英文文本中的单词数并排序
思路如下:1.使用的Hashtable(高效)集合,记录每个单词出现的次数2.采用ArrayList对Hashtable中的Keys按字母序排列3.排序使用插入排序(稳定) public void S ...
- 练习1-12:编写一个程序,以每行一个单词的形式打印其输入(C程序设计语言 第2版)
#include <stdio.h> #define NOT_BLANK 1 #define BLANK 0 main() { int c; int last_ch = NOT_BLANK ...
- JAVA实验--统计文章中单词的个数并排序
分析: 1)要统计单词的个数,就自己的对文章中单词出现的判断的理解来说是:当出现一个非字母的字符的时候,对前面的一部分字符串归结为单词 2)对于最后要判断字母出现的个数这个问题,我认为应该是要用到ma ...
- N个任务掌握java系列之统计一篇文章中单词出现的次数
问题:统计一篇文章中单词出现的次数 思路: (1)将文章(一个字符串存储)按空格进行拆分(split)后,存储到一个字符串(单词)数组中. (2)定义一个Map,key是字符串类型,保存单词:valu ...
- 1st 英文文章词频统计
英文文章词频统计: 功能:统计一篇英文文章的单词总数及出现频数并输出,之后排序,输出频数前十的单词及其频数. 实现方法:使用C语言,用fopen函数读入txt文件,fscanf函数逐个读入单词,结构体 ...
- 『转』统计一个日志文件里,单词出现频率的shell脚本
原文地址:http://blog.csdn.net/taiyang1987912/article/details/39995175 #查找文本中n个出现频率最高的单词 #!/bin/bash coun ...
随机推荐
- 效果网址http://sc.chinaz.com/tag_jiaoben/tupianlunbo.html
http://sc.chinaz.com/tag_jiaoben/tupianlunbo.html
- Ubuntu下Git的使用之创建版本库
创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以 ...
- CodeForces 707C Pythagorean Triples
数学,构造. 这题比较有意思,一开始没发现结论写了一个最坏复杂度为$O({10^9})$暴力居然能$AC$,正因为如此,我才发现了规律. 一开始是这么想的: 先假设$n$为直角边,设斜边长度为$c$, ...
- apache bench(ab)压力测试模拟POSt请求
ab命令格式: -N|--count 总请求数,缺省 : 5w -C|--clients 并发数, 缺省 : 100 -R|--rounds 测试次数, 缺省 : 10 次 -S|-sleeptime ...
- jquery轻松实现li标签上下滚动的原理
在网站上我们常看到有滚动的文字或者图片,比如消息提醒,新闻列表,等等.那么这些效果是怎么形成的呢?经过查阅,找到一种十分方便的写法,经过改良,得出我自己的终极版滚动效果. 我先写个布局吧 <di ...
- java 缓存ehcache的使用(使用方式一)
实体要序列化 resource文件夹下建立 ehcache.xml <?xml version="1.0" encoding="UTF-8"?> & ...
- [Q]自定义保存位置及文件名
以“DWG To PDF.pc3”打印为例: 说明:<DrawingDirectory> 当前图纸所在目录<DrawingFolderName> 当前图纸文件所在文件夹名称&l ...
- 关于sbutils中的sblaunch插件的疑惑
一.sbutils介绍 sbutils是一个开源的越狱手机基础功能的插件包,其中包含sblaunch这个启动插件,该插件可以实现命令行下面打开app并传递一个url. sbutils下载地址:http ...
- php笔记(四)PHP类和对象之对象继承
建立一个Truck类,扩展Car类,并覆盖speedUp方法,使速度累加50 <?php class Car { public $speed = 0; //汽车的起始速度是0 public fu ...
- openvpn环境搭建
以下为服务端.客户端下载安装包,在CentOS 6.5部署,也可以找到相关下载源 openvpn-2.2.2.tar.gz,openvpn-2.1.3-install.rar,(https://git ...