C语言词频统计设计
项目需求:
1.设计一个词频统计小软件,对给定的英文文章进行单词频率的统计。
2.文章中相应的标点不计入统计。
3.将统计结果以从大到小的排序方式输出。
设计:
1.因为功能相对简单,采用C语言直接进行编写。
2.项目包含的统计功能利用定义的结构体分别对单词和次数进行统计。
3.以字符串的形式读取单词,并对其中的每个字符进行标点分析。
4.统计完成后采用冒泡排序的方式对次数进行排序。
5.将整个统计结果循环输出。
部分核心代码:
结构体定义:
定义一个结构体来存放读取的单词与其统计的次数。
typedef struct addup
{
char word[];
int count;
}R;
读取文本1.0(采用fopen函数读取固定路径文本):
char temp[];
R fin[]={"\0",};
fp=fopen("f:/1.txt","r");
读取文本2.0(采用stdin函数手动输入读取路径):
改进:相对之前的代码,更换函数使得可以用户手动录入想要读取的文本路径,而不用直接修改源码。
char temp[50];
R fin[10000]={"\0",0};
char file[];
fflush(stdin);
gets(file);
fp=freopen(file,"r",stdin);
单词匹配:
针对读取的每个单词,和结构体中之前存取的单词进行对比,如果相同则累计数量,如果不同则更新数组。
while(!feof(fp))
{
fscanf(fp,"%s",temp);
q=strlen(temp);
n++;
for(i=;i<n;++i)
if(strcmp(fin[i].word,temp)==)
{
fin[i].count++;
n--;
break;
}
if(i>=n)
{
strcpy(fin[n-].word,temp);
fin[n-].count++;
}
}
标点判定:
将读取的字符串以字符为单位判断标点并去除。
for(i=;i<q;i++)
{
if(temp[i]==','||temp[i]=='.'||temp[i]=='?'||temp[i]=='!'||temp[i]=='"')
temp[i]='\0';
}
冒泡排序:
for (i=;i<n;i++)
for (j=;j<n-i;j++)
{
if (fin[j].count<fin[j+].count)
{
ls[]=fin[j+];
fin[j+]=fin[j];
fin[j]=ls[];
}
}
输出结果:
freopen("f:/2.txt","w",stdout);
for(i=;i<n;i++)
{
printf("%s : ",fin[i].word);
s=;
for(j=;j<fin[i].count;++j)
s++;
printf("%d 次",s);
printf("\n");
}
fclose(stdout);
测试用例:
因为词频统计单词重复几率不会过高,因此小篇幅文章不一定能得出好的测试结果,选取了马丁路德金的《I have a dream》演讲稿进行统计。
全篇单词量:1666
测试结果:
C语言词频统计设计的更多相关文章
- 软工之词频统计器及基于sketch在大数据下的词频统计设计
目录 摘要 算法关键 红黑树 稳定排序 代码框架 .h文件: .cpp文件 频率统计器的实现 接口设计与实现 接口设计 核心功能词频统计器流程 效果 单元测试 性能分析 性能分析图 问题发现 解决方案 ...
- C# 词频统计 东北师范大学 软件项目管理 第一次作业
一.作为杨老师的学生第一次听杨老师讲课,印象最深的就是:工程中所有步骤之间是乘法,如果任何一步为0,工程就做不出来了.以前所有老师讲到的都是不要太在乎结果,努力的过程很重要,但是这在软件工程中不合适了 ...
- c语言实现词频统计
需求: 1.设计一个词频统计软件,统计给定英文文章的单词频率. 2.文章中包含的标点不计入统计. 3.将统计结果以从大到小的排序方式输出. 设计: 1.因为是跨专业0.0···并不会c++和java, ...
- (改进)Python语言实现词频统计
需求: 1.设计一个词频统计的程序. 2.英语文章中包含的英语标点符号不计入统计. 3.将统计结果按照单词的出现频率由大到小进行排序. 设计: 1.基本功能和用法会在程序中进行提示. 2.原理是利用分 ...
- 个人项目-词频统计(语言:C++)
词频统计 (个人项目) 要求 (1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率. 附加要求:读入一段文本文件,统计该文本文件中单词的频率. (2) ...
- C语言程序与设计:统计素数并求和
目录 C语言程序与设计:统计素数并求和 1.题目要求 2.分析 3.代码 C语言程序与设计:统计素数并求和 1.题目要求 输入两个正整数 m 和 n(1≤m≤n≤500),统计给定整数 m 和 n 区 ...
- C语言实现词频统计——第二版
原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命 ...
- 作业3-个人项目<词频统计>
上了一天的课,现在终于可以静下来更新我的博客了. 越来越发现,写博客是一种享受.来看看这次小林老师的“作战任务”. 词频统计 单词: 包含有4个或4个以上的字 ...
- python词频统计及其效能分析
1) 博客开头给出自己的基本信息,格式建议如下: 学号2017****7128 姓名:肖文秀 词频统计及其效能分析仓库:https://gitee.com/aichenxi/word_frequenc ...
随机推荐
- windows 8 中 使用 httpclient
基本技术点 windows 8 中 使用 httpclient 代替 windows phone 中的 httpwebclient , 使用方法 也有些不同 . 下面是windows 8种使用 htt ...
- 【转载】COM 组件设计与应用(三)——数据类型
原文:http://vckbase.com/index.php/wv/1206.html COM 组件设计与应用 系列文章:http://vckbase.com/index.php/piwz?& ...
- 通过IDEA解决spring配置文件
来自:https://blog.csdn.net/yanghanxiu/article/details/79366263 (其实尼可以使用springboot 这样就不用配置一大堆东西了喵!) 每次创 ...
- Appium+python的单元测试框架unittest(1)(转)
unittest为python语言自带的单元测试框架,python把unittest封装为一个标准模块封装在python开发包中.unittest中常用的类有:unittest.TestCase.un ...
- kali虚拟机安装后操作[配置ssh,安装vmtools,更新源]
更新源 # 打开控制台, 输入以下命令打开编辑器修改配置文件 $ leafpad /etc/apt/sources.list #kali官方源 deb http://http.kali.org/kal ...
- .net中 多线程 笔记(基础)
1. 在进程中可以有多个线程同时执行代码.进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把 ...
- [C++]值传递和引用传递
概念 在定义函数时函数括号中的变量名成为形式参数,简称形参或虚拟参数: 在主调函数中调用一个函数时,该函数括号中的参数名称为实际参数,简称实参,实参可以是常量.变量或表达式. 注意: C语言中实参和形 ...
- 我用Python远程探查室友的网页浏览记录,他不愧是成年人!
过程: 利用Python制作远程查看别人电脑的操作记录,与其它教程类似,都是通过邮件返回. 利用程序得到目标电脑浏览器当中的访问记录,生产一个文本并发送到你自己的邮箱,当然这个整个过程除了你把pyth ...
- node上的__dirname和./的区别
概要 Node.js 中,__dirname 总是指向被执行 js 文件的绝对路径,所以当你在 /d1/d2/myscript.js 文件中写了 __dirname, 它的值就是 /d1/d2 . 相 ...
- 我眼中的PD(产品狗)
以下内容可能引起您的不适(前方高能),请先移步科普: 产品经理为什么会存在? 本猿 -> web程序属 -> 前端开发种,从大森林迁徙到了小草原: 小草原物种稀缺,除了 程序猿,很难见到诸 ...