统计一段文字中出现频率最高的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 ...
随机推荐
- 2016最全的web前端面试题及答案整理
面试web前端开发,不管是笔试还是面试,都会涉及到各种专业技术问题,今天小编整理了一些常见的web前端面试题及答案,希望对大家有所帮助. 1.常用那几种浏览器测试?有哪些内核(Layout Engin ...
- TensorFlow Playground
A Neural Network Playground Understanding neural networks with TensorFlow Playground 机器之心翻译
- 机器学习与R语言
此书网上有英文电子版:Machine Learning with R - Second Edition [eBook].pdf(附带源码) 评价本书:入门级的好书,介绍了多种机器学习方法,全部用R相关 ...
- sizeof和strlen()的区别
二者有本质上的区别 从定义可以知道sizeof只是一个operator,而strlen()则是定义一个定义在<string.h>中的函数;所以sizeof(string)是在计算strin ...
- 按键精灵 句柄 获得句柄 控制windows窗口 后台
新建一个文本文档,打开,Windows就会给这个文本文档的窗口临时分配唯一的一串数字来标识这个窗体,以区别于其他窗口,这串数字就叫句柄. 因为句柄是临时随机分配的,所以每次虽然是打开同一个文件,但 ...
- img src 使用 base64 图片数据
img src 使用 base64 图片数据 在网页上显示一张图片通常是 <img src="xxx.png" > 或 <img src="www.ur ...
- java 集合2(迭代器)
迭代器方法:(把迭代器想象成抓娃娃机的爪子) hasNext() 问是否有元素可遍历,如果有元素可以遍历,返回true,否则返回false 工作原理:这一个迭代的过程是这样的,获取到迭代器时候 ...
- eclipse ssh连接sqlserver express
public static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; public stati ...
- OOAD与UML笔记
UML基础介绍 1.UML的定义 统一建模语言(UML)是一种图形化的语言,它可以帮助我们在OOAD过程中标识元素.构建模块.分析过程并可通过文档说明系统中的重要细节 2.OOAD OO ...
- Jsp-Servlet 那一大堆事儿--1
为毛全局变量声明时初始化在try内不能用? import javax.servlet.http .*; import java.io.*; import javax.servlet.*; import ...