统计一段文字中出现频率最高的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 ...
随机推荐
- 项目二:使用机器学习(SVM)进行基因预测
SVM软件包 LIBSVM -- A Library for Support Vector Machines(本项目所用到的SVM包)(目前最新版:libsvm-3.21,2016年7月8日) C-S ...
- linux 重命名文件和文件夹
linux下重命名文件或文件夹的命令mv既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c 其实在文本模式 ...
- css读书笔记3:定位元素
定位元素要掌握css技术,核心就是要掌握元素定位. 一般把下面这条规则作为所有css样式表的第一条,初始化所有元素的内边距和外边距都为0: * {padding:0;margin:0;} 盒模型浏览器 ...
- GoF--原型设计模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.
- 理论与实践中的 C# 内存模型,第 2 部分
转载自:https://msdn.microsoft.com/zh-cn/magazine/jj883956.aspx 这是介绍 C# 内存模型的系列文章的第二篇(共两篇). 正如在 MSDN 杂志十 ...
- Word Search [LeetCode]
Problem Description: http://oj.leetcode.com/problems/word-search/ Basic idea: recursively go forward ...
- android:launchMode的四种方式
Activity一共有以下四种launchMode: standard singleTop singleTask singleInstance 1.standard standard模式是默认的启动模 ...
- 最小生成树练习2(Kruskal)
两个BUG鸣翠柳,一行代码上西天... hdu4786 Fibonacci Tree(生成树)问能否用白边和黑边构成一棵生成树,并且白边数量是斐波那契数. 题解:分别优先加入白边和黑边,求出生成树能包 ...
- oracle第一章
1.oracle对比sqlserver oracle sqlserver 数据文件.dbf 数据文件.mdf 控制文件.ctl 日志文件.log 日志文件.log 2.内置用户 1.sys ...
- 更改电脑与eclpse热键冲突