项目需求:

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语言词频统计设计的更多相关文章

  1. 软工之词频统计器及基于sketch在大数据下的词频统计设计

    目录 摘要 算法关键 红黑树 稳定排序 代码框架 .h文件: .cpp文件 频率统计器的实现 接口设计与实现 接口设计 核心功能词频统计器流程 效果 单元测试 性能分析 性能分析图 问题发现 解决方案 ...

  2. C# 词频统计 东北师范大学 软件项目管理 第一次作业

    一.作为杨老师的学生第一次听杨老师讲课,印象最深的就是:工程中所有步骤之间是乘法,如果任何一步为0,工程就做不出来了.以前所有老师讲到的都是不要太在乎结果,努力的过程很重要,但是这在软件工程中不合适了 ...

  3. c语言实现词频统计

    需求: 1.设计一个词频统计软件,统计给定英文文章的单词频率. 2.文章中包含的标点不计入统计. 3.将统计结果以从大到小的排序方式输出. 设计: 1.因为是跨专业0.0···并不会c++和java, ...

  4. (改进)Python语言实现词频统计

    需求: 1.设计一个词频统计的程序. 2.英语文章中包含的英语标点符号不计入统计. 3.将统计结果按照单词的出现频率由大到小进行排序. 设计: 1.基本功能和用法会在程序中进行提示. 2.原理是利用分 ...

  5. 个人项目-词频统计(语言:C++)

    词频统计 (个人项目) 要求 (1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率. 附加要求:读入一段文本文件,统计该文本文件中单词的频率. (2) ...

  6. C语言程序与设计:统计素数并求和

    目录 C语言程序与设计:统计素数并求和 1.题目要求 2.分析 3.代码 C语言程序与设计:统计素数并求和 1.题目要求 输入两个正整数 m 和 n(1≤m≤n≤500),统计给定整数 m 和 n 区 ...

  7. C语言实现词频统计——第二版

    原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命 ...

  8. 作业3-个人项目<词频统计>

    上了一天的课,现在终于可以静下来更新我的博客了.       越来越发现,写博客是一种享受.来看看这次小林老师的“作战任务”.                词频统计 单词: 包含有4个或4个以上的字 ...

  9. python词频统计及其效能分析

    1) 博客开头给出自己的基本信息,格式建议如下: 学号2017****7128 姓名:肖文秀 词频统计及其效能分析仓库:https://gitee.com/aichenxi/word_frequenc ...

随机推荐

  1. linux日志分割、去重、统计

    一.实例 单条日志模板: 2018-11-08 02:17:22 [Iceberg]process params:IcebergOfferServiceImpl.Params(pk=BF06NA2YE ...

  2. 使用VS Code新建编译Flutter项目

    本文的前提是你已经安装好了VS Code,并且安装了Flutter和Dart扩展插件. 1. 新建Flutter项目 查看——命令面板,或者Ctrl + Shift + P 输入 Flutter: N ...

  3. this四种绑定方式之间的奇淫技巧

    写在前面 上一篇中,我们对于JavaScript中原始值.复杂值以及内存空间进行了一个深入浅出的总结,这次我们来聊一聊JavaScript中this关键字的深入浅出的用法. 在 JavaScript ...

  4. nginx配置转发详解

    nginx各项参数的详细配置 本文主要讲解nginx.conf中server部分配置及多路转发问题: server { listen 9090; server_name 127.0.0.1; #cha ...

  5. 一个针对string的较好的散列算发djb2

    var djb2HashCode = function(key) { var hash = 5831; for(var i = 0; i < key.length; i++) { hash = ...

  6. Python读取文件编码解码问题

    用chardet检测编码 import chardet raw = open("model.json", 'rb').read() result = chardet.detect( ...

  7. Android Dalvik虚拟机初识

    摘自:http://blog.csdn.net/andyxm/article/details/6126907 首先,让我们来思考下面几个问题: 什么是Dalvik虚拟机? Dalvik VM与JVM有 ...

  8. MD5加密--项目案例

    在项目中最尝使用MD5这种非对称加密的就是用户信息登录了.下面我就以一个简单的登录案例来说明MD5的用法 首先来看几张图: 用户登录页:需要选择要登录的系统,同时输入用户的用户名和密码,验证码才能进入 ...

  9. SICP读书笔记 3.4

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  10. 《The Mythical Man-Month(人月神话)》读后感(2)

    第10章 未雨绸缪 在化学领域中,在实验室可以进行的反应过程,并不能在工厂中一步实现.一个被称为“ 实验性工厂(pilot planet)”的中间步骤是非常必要的,它会为提高产量和在缺乏保护的环境下运 ...