C语言实现词频统计——第二版
原需求
1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符。
2.统计英文单词在本文件的出现次数
3.将统计结果排序
4.显示排序结果
新需求:
1.小文件输入. 为表明程序能跑
2.支持命令行输入英文作品的文件名
3. 支持命令行输入存储有英文作品文件的目录名,批量统计
4. 从控制台读入英文单篇作品,重定向输出
代码实现:
在原代码的基础上稍做了修改,使之可以批量读取文件夹下的所有文件,所以加了一个mode来判断是单个文件输入还是文件夹输入,来不及整理程序,所以现在程序有点丑。这次作业交了以后会干两件事,第一是精简程序结构,第二是优化程序性能,可能会重新构思程序的主体部分。
if (mode == )
{
printf("输入读入文件夹的名字:");
scanf("%s", &fa);
if ((fHandle = _findfirst("*.txt", &fa)) == -1L) //文件夹目录
{
printf("当前目录下没有txt文件\n");
return ;
}
else
do
{
fp = fopen(fa.name, "r");
for (i = ; i < ; i++)
{
(w + i)->num = ;
} /****************单词匹配****************************************/
i = ;
while (!feof(fp))//文件尚未读取完毕
{
ch = fgetc(fp);
(w + i)->a[j] = '\0';
if (ch >= && ch <= || ch >= && ch <= ) //ch若为字母则存入
{
(w + i)->a[j] = ch;
j++;
flag = ; //设标志位判断是否存在连续标点或者空格
}
else if (!(ch >= && ch <= || ch >= && ch <= ) && flag == ) //ch若不是字母且上一个字符为字母
{
i++;
j = ;
flag = ;
for (m = ; m < i - ; m++) //匹配单词,若已存在则num+1
{
if (stricmp((w + m)->a, (w + i - )->a) == )
{
(w + m)->num++;
i--;
}
}
}
/****************动态分配内存****************************************/
if (i == (p * )) //用i判断当前内存已满
{
p++;
w = (struct fre_word*)realloc(w, * p*(sizeof(struct fre_word)));
for (n = i; n <= * p; n++) //给新分配内存的结构体赋初值
(w + n)->num = ;
}
}
i = i - ;
quick(w, , i); printf("文件%s词频统计如下\n", fa.name);
printf("不重复的单词数:");
printf("%d\n", i);
for (n = ; n <; n++)
{
printf("文档中出现的单词:");
printf("%-18s", (w + n)->a);
printf("其出现次数为:");
printf("%d\n", (w + n)->num);
}
printf("\n"); } while (_findnext(fHandle, &fa) == );
_findclose(fHandle);
fclose(fp);
return ;
free(w); }
其余部分和之前第一版几乎没有区别,就不再赘述。
运行结果:
功能1:

功能2:

功能3:

功能4:

coding:https://git.coding.net/gongcr/word-frequency.git
openssh:git@git.coding.net:gongcr/word-frequency.git
git:git://git.coding.net/gongcr/word-frequency.git
得分项:
表一:

表二:
项目:词频统计第二版
项目类型:个人项目
项目日期:2016.9.11-2016.9.13
11号
| 类别c | 内容c | 开始时间s | 结束e | 中断I | 净时间T |
| 项目实践 | 看书 | 8:00 | 10:00 | 20m | 100m |
| 项目实践 | 需求分析 | 10:00 | 10:40 | 10m | 30m |
| 项目实践 | 安装vs |
12号
| 类别c | 内容c | 开始时间s | 结束e | 中断I | 净时间T |
| 项目实践 | 调试vs | 8:00 | 10:00 | 0m | 120m |
| 项目实践 | 重装系统/vs | 12:00 | 16:00 | 0m | 240m |
| 项目实践 | 效能分析 | 19:00 | 19:40 | 0m | 40m |
| 项目实践 | 编码 | 20:00 | 22:00 | 20m | 100m |
13号
| 类别c | 内容c | 开始时间s | 结束e | 中断I | 净时间T |
| 项目实践 | 查资料 | 8:00 | 10:30 | 0m | 150m |
| 项目实践 | 编码 | 10:30 | 11:30 | 10m | 50m |
| 项目实践 | 编码 | 13:40 | 15:00 | 50m | 30m |
| 项目实践 | 计算工作量 | 15:00 | 15:20 | 0m | 20m |
| 项目实践 | 写博客 | 20:00 | 21:15 | 0m | 75m |
C语言实现词频统计——第二版的更多相关文章
- c语言实现词频统计
需求: 1.设计一个词频统计软件,统计给定英文文章的单词频率. 2.文章中包含的标点不计入统计. 3.将统计结果以从大到小的排序方式输出. 设计: 1.因为是跨专业0.0···并不会c++和java, ...
- java词频统计——web版支持
需求概要: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件. 2.用户直接输入要统计的文本,服务器返回结果 3.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经 ...
- (改进)Python语言实现词频统计
需求: 1.设计一个词频统计的程序. 2.英语文章中包含的英语标点符号不计入统计. 3.将统计结果按照单词的出现频率由大到小进行排序. 设计: 1.基本功能和用法会在程序中进行提示. 2.原理是利用分 ...
- 武汉科技大学ACM :1009: 华科版C语言程序设计教程(第二版)习题6.11
Problem Description n个人围成一圈,依次从1至n编号.从编号为1的人开始1至k报数,凡报数为k的人退出圈子,输出最后留下的一个人原来的编号. Input 首先输入一个t,表示有t组 ...
- 武汉科技大学ACM:1009: 华科版C语言程序设计教程(第二版)习题5.12
Problem Description 这天老师照例给小豪出了一道题目:老师给小豪一个字符串,让小豪将该字符串逆序输出. Input 第一行包括一个T,表示有多少组测试数据: 接下来T行,每行包括一个 ...
- 武汉科技大学ACM:1006: 华科版C语言程序设计教程(第二版)例题4.17
Problem Description 输入一个整数,求它的素数因子.并按照格式输出. Input 一个整数n.(2<=n<=100) Output n=a*b*c*... (a,b,c为 ...
- 武汉科技大学ACM:1005: 华科版C语言程序设计教程(第二版)例题5.8
Problem Description 老师给小豪出了一道题目:给你两个整数x和n(-10<=x<=10,1<=n<=10),让你求出x^1+x^2+x^3+……+x^n的结果 ...
- 武汉科技大学ACM:1004: 华科版C语言程序设计教程(第二版)习题5.6
Problem Description 这天老师又给小豪出了一道题目:给你三根长度分别为a,b,c的火柴,让你计算这三跟火柴能组成的三角形的面积. Input 输入每行包括三个数a,b,c. Outp ...
- 武汉科技大学ACM:1003: 华科版C语言程序设计教程(第二版)例题6.6.改编
Problem Description 小明明最喜欢学英语了,英语课从来不翘课,但是英语却一直没学好,因为上课一直在睡觉.为什么会睡觉呢,因为他觉得英文单词太长了.现在小明明有一个很长很长很长的单词, ...
随机推荐
- Dom之表单提交与默认行为
一.button提交表单 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- ExpandableListView方法详解
正文 一.结构public interface ExpandableListAdapter 间接子类:BaseExpandableListAdapter,CursorTreeAdapter,Resou ...
- MySQL 加锁处理分析 转
MySQL 加锁处理分析 转 http://hedengcheng.com/?p=771 十二 13th, 2013 发表评论 | Trackback 1 背景 1 1.1 M ...
- IOS:被误解的MVC和被神化的MVVM
MVC的历史 MVC,全称是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写.它表示的是一种常见的客户端软件开发框架. ...
- @media_screen
html,body{ margin:0; padding:0; }body{ background:#0f0;} /* @media screen and (min-width: 800px)and( ...
- [原]一个简单的Linux TCP Client所涉及到的头文件
今天在Linux环境下写了一个最简单的TCP Client程序,没想到Linux环境下的头文件竟然这么分散,让我这样的菜鸟很是郁闷啊.编译成功的代码如下: #include <iostream& ...
- Lumen 设置 timezone 时区
Lumen 设置 timezone 时区 2015-06-19| wid| 后端开发 今天用 Lumen 框架写代码时, 也是初次体验 Lumen, 遇到了一个问题, 从数据库里查出的时间比数据库里保 ...
- 【转】Java HashMap 源码解析(好文章)
.fluid-width-video-wrapper { width: 100%; position: relative; padding: 0; } .fluid-width-video-wra ...
- Install and configure Intel NIC teaming on R420
OS env: windows2008 R2 std 1. Download NIC driver from Dell Website http://www.dell.com/support/home ...
- 【linux】之虚拟机的使用
VMware常用的配置 1.虚拟机快照设置 2.虚拟机克隆 分为链接克隆和完整克隆 链接克隆不占用过大的资源,但是主机删除之后,克隆机无法正常使用 完整克隆,占用空间资源,和主机之间互不影响 一般常用 ...