统计一段文字中出现频率最高的10个单词(c语言)
注:这次使用C语言做的这个程序。个别不懂的地方和算法部分是请教的其他同学,交流并吸收,所以收获颇多!
在程序中每一个地方我都做了注释,方便同学之间交流。也让老师容易看。程序也有很多不足的地方,但限于本人能力有限以及时间紧迫,难免出现很多问题,希望老师和同学能够帮助解决!
设计思路:(在代码中基本都做了注释,很好的体现了这里的设计思路)
1.这个程序首先我定义了一个结构体,内容包含单词的出现次数和单词的长度。
2.然后把所有单词出现的次数都设置为1,以便后面进行比较。
3.文件的读取工作很简单,以前学过。使用if((fp=fopen(filename,"r"))==NULL)语句即可。
4.然后开始识别单词,如果单词后面有空格则认为一个单词结束。使用flag标志,来进行确定。
5.最后根据出现次数进行排序,然后输出。
下面是程序读取文件后的运行结果:

代码部分:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct S_word
{
int num;
char a[];// 单词的长度
};
int main()
{
struct S_word W[]; //定义一个结构体W
int i,m,n,k;
char b[]; // 用来和a【10】交换的数组
FILE *fp; // 定义文件
char ch; //从文件中读取字符
int flag=; //标志空格后面是否有单词
int j=;
int temp; //排序时交换用
char filename[];
/****************首先将出现次数均设置为1****************************/
for(i=;i<;i++)
{ W[i].num=;
}
i=;
/****************首先将出现次数均设置为1****************************/
/****************打开文件****************************/
printf("Please input the name of the file :\n");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
{
printf("error opening!");
exit();
}
/****************打开文件****************************/
/****************读取文件内容****************************/
while(!feof(fp))
{
ch=fgetc(fp);
W[i].a[j]='\0';
if(ch>=&&ch<=||ch>=&&ch<=)
{
W[i].a[j]=ch; //识别单词
j++;
flag=;
}
else if(ch==' '&&flag==)
{
flag=;
j=;
n=i;
i++;
if(n>=) //每一个单词跟前面的比较,如果相同就使次数加一
{
for(m=;m<n;m++)
{
if(strcmp(W[n].a,W[m].a)==)
{
W[m].num++;
i=i-; //如果单词相同则认为是一个单词
}
}
}
}
}
/****************根据单词出现次数进行排序***************************/
for(n=;n<i-;n++)
{
k=n;
for(j=n+;j<i;j++)
if(W[j].num>W[k].num)
{ k=j;
temp=W[k].num;
W[k].num=W[n].num;
W[n].num=temp;
strcpy(b,W[k].a);
strcpy(W[k].a,W[n].a);
strcpy(W[n].a,b);
}
}
/****************根据单词出现次数进行排序**********/
/****************输出部分**************************/
printf("The most commonly 10 words:\n");
for(n=;n<=;n++)
{ printf("%s\n",W[n].a);
printf("其出现次数为:");
printf("%d\n",W[n].num);
}
/****************输出部分**************************/
return ; }
统计一段文字中出现频率最高的10个单词(c语言)的更多相关文章
- C++统计一段文字中各单词出现的频率
#include <iostream> using namespace std; /* run this program using the console pauser or add y ...
- 使用PHP的strstr()函数来统计一段字符串中元音字母的个数(区分大小写)
<?php/**练习:统计一段字符串中所有元音字母的个数(区分大小写)*/$str='This is a test file.'; //原始字符串echo $str.'<br>'; ...
- 一段文字中的几个keyword显示高亮
将一段文字中的几个keyword显示高亮 演示样例:将"我的愿望是当个绿巨人,所以我想让我的皮(derma)肤是绿色"中的"皮肤"显示绿色. <span ...
- js或者jq判断一段文字中是否有自己想要的那几个字,如果有就把那几个字变成红色
如何判断一段文字中是否有自己想要的那几个字,如果有就把那几个字变成红色(在html中)比如有body中有这么一串文字“驾驶的后视镜的华盛顿”,想要判断里面是否有“驾驶”这两个字,如果有就把这两个字变成 ...
- java 实现统计某段文字在内容中出现的次数
http://outofmemory.cn/code-snippet/815/java-zishutongji 一个api,位于apache.commons.lang.StringUtils类下的一个 ...
- JS 实现计算一段文字中的字节数,字母数,数字数,行数,汉字数。
看到了匹配,第一个想到了用正则表达式,哈哈,果然很方便.不过正则表达式高深莫测!我还没有研究明白啊..目前学了点皮毛.代码如下: <!DOCTYPE html PUBLIC "-//W ...
- Linux作业(三)-shell统计某文章中出现频率最高的N个单词并排序输出出现次数
Linux课上的作业周三交,若有考虑不周到的地方,还请多多不吝赐教. shell处理文本相关的经常使用命令见此博客 # #假设输入两个參数 则第一个为统计单词的个数.第二个为要统计的文章 #假设输入一 ...
- 从一段文字中提取出uri信息
package handle.groupby; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io ...
- unity插件,从一段文字中提取中文并去重
using System.Collections.Generic; using System.Text.RegularExpressions; using UnityEditor; using Uni ...
随机推荐
- hiho_1044 状态压缩
题目大意 给定N个位置,每个位置i都有一个value[i]值,从中选择若干个位置,使得连续的M个位置中的被选中的位置数目不超过Q,求出所有选择方案中value和最大的方案,输出其最大value和. 分 ...
- Hive优化
hive.optimize.cp=true:列裁剪hive.optimize.prunner:分区裁剪hive.limit.optimize.enable=true:优化LIMIT n语句hive.l ...
- 【bzoj3625】【xsy1729】小朋友和二叉树
[bzoj3625]小朋友与二叉树 题意 我们的小朋友很喜欢计算机科学,而且尤其喜欢二叉树. 考虑一个含有n个互异正整数的序列c[1],c[2],...,c[n].如果一棵带点权的有根二叉树满足其所有 ...
- AOP 之 6.1 AOP基础(拾陆)
6.1.1 AOP是什么 考虑这样一个问题:需要对系统中的某些业务做日志记录,比如支付系统中的支付业务需要记录支付相关日志,对于支付系统可能相当复杂,比如可能有自己的支付系统,也可能引入第三方支付平 ...
- iOS应用架构谈 本地持久化方案及动态部署
转载: iOS应用架构谈 本地持久化方案及动态部署 前言 嗯,你们要的大招.跟着这篇文章一起也发布了CTPersistance和CTJSBridge这两个库,希望大家在实际使用的时候如果遇到问题,就给 ...
- canvas实现绘画
html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- linux服务器挂载第二块磁盘图文解说
文章来源:http://www.cndns.com/help/help_con.aspx?hid=394 Linux磁盘挂载是比较常见的管理操作之一.我司橙云预装的linux系统有2块盘,一块为系统盘 ...
- sina 行情api
http://blog.csdn.net/simon803/article/details/7784682
- hibernate annotation注解方式来处理映射关系
在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...
- web基础之hibernate(一篇)
hibernate的一些基本的认识 1. hibenate是一个框架(framework) 2. hibernate是一个orm框架 3. orm(object r ...