原需求

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语言实现词频统计——第二版的更多相关文章

  1. c语言实现词频统计

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

  2. java词频统计——web版支持

    需求概要: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件. 2.用户直接输入要统计的文本,服务器返回结果 3.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经 ...

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

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

  4. 武汉科技大学ACM :1009: 华科版C语言程序设计教程(第二版)习题6.11

    Problem Description n个人围成一圈,依次从1至n编号.从编号为1的人开始1至k报数,凡报数为k的人退出圈子,输出最后留下的一个人原来的编号. Input 首先输入一个t,表示有t组 ...

  5. 武汉科技大学ACM:1009: 华科版C语言程序设计教程(第二版)习题5.12

    Problem Description 这天老师照例给小豪出了一道题目:老师给小豪一个字符串,让小豪将该字符串逆序输出. Input 第一行包括一个T,表示有多少组测试数据: 接下来T行,每行包括一个 ...

  6. 武汉科技大学ACM:1006: 华科版C语言程序设计教程(第二版)例题4.17

    Problem Description 输入一个整数,求它的素数因子.并按照格式输出. Input 一个整数n.(2<=n<=100) Output n=a*b*c*... (a,b,c为 ...

  7. 武汉科技大学ACM:1005: 华科版C语言程序设计教程(第二版)例题5.8

    Problem Description 老师给小豪出了一道题目:给你两个整数x和n(-10<=x<=10,1<=n<=10),让你求出x^1+x^2+x^3+……+x^n的结果 ...

  8. 武汉科技大学ACM:1004: 华科版C语言程序设计教程(第二版)习题5.6

    Problem Description 这天老师又给小豪出了一道题目:给你三根长度分别为a,b,c的火柴,让你计算这三跟火柴能组成的三角形的面积. Input 输入每行包括三个数a,b,c. Outp ...

  9. 武汉科技大学ACM:1003: 华科版C语言程序设计教程(第二版)例题6.6.改编

    Problem Description 小明明最喜欢学英语了,英语课从来不翘课,但是英语却一直没学好,因为上课一直在睡觉.为什么会睡觉呢,因为他觉得英文单词太长了.现在小明明有一个很长很长很长的单词, ...

随机推荐

  1. P1001 第K极值【tyvj】

    /*========================================== P1001 第K极值 内存限制 128MB 代码限制 64KB 描述 Description 给定一个长度为N ...

  2. Linux-Load blance

    在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转 ...

  3. css之cursor,float

    鼠标形状: 在html中可以任意定义各个标签的显示形状,也可以此用来做些标签显示假像. <body> <p style="cursor: pointer"> ...

  4. HDP2.4安装(三):MySql安装

    在安装Ambari时,Ambari默认的数据库是ProstgreSQL,对ProstgreSQL不太熟悉,选择使用MySql. 但Centos 7 默认支持的是MariaDB数据库. MariaDB是 ...

  5. 每日学习心得:Linq解决DataTable按照某一列的值排序问题/DataTable 导出CSV文件/巧用text-overflow解决数据绑定列数据展示过长问题

    2013-8-5 1 Linq解决DataTable按照某一列的值排序 在之前的总结中提到过对拼接而成的复合的DataTable按照某一列值的大小排序,那个主要的思想是在新建表结构时将要排序的那一列的 ...

  6. ASIHttpRequest addRequestHeader的处理

    我现在用到了ASIHttpRequest来读取数据,这时候我发现里面的头在很多时候都是一样的.如用户的令牌,设备类型,ios版本,软件版本等 [self.request addRequestHeade ...

  7. IntelliJ IDEA优化总结

    1.修改JVM参数 (IntelliJ IDEA 10.0.1包含以上版本不需要设置)修改idea.exe.vmoptions配置文件调整以下内容:-Xms256m-Xmx384m-XX:MaxPer ...

  8. Windows2008 Patching(打补丁)

    我们都知道Windows的服务器都需要打补丁的,要不然漏洞那个叫多啊.Windows的系列服务器打补丁无非就是两种方法: 1. 通过Internet打补丁: Go to control Panel-& ...

  9. Python 处理多层嵌套列表

    >>> movies =[ "the holy grail", 1975,"terry jones",91, ["graham ch ...

  10. android学习笔记23——菜单

    菜单在桌面应用程序中使用非常广泛,由于手机屏幕的制约,菜单在手机应用中减少不少. android应用中的菜单默认是不可见的,只有当用户单击手机上“Menu”键时,系统才会显示该应用关联的采用项. an ...