原需求

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. VB的if和elseif

    VB中if和elseif的用法是: if...then...elseif...then...else...endif 切记在then的后面不要加冒号,加了冒号出现else没有if的错误,因为加了冒号表 ...

  2. Android Bitmap和Canvas学习笔记 [转]

    原文:http://www.cnblogs.com/feisky/archive/2010/01/10/1643460.html 位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最有吸引力的. ...

  3. 【extjs】 Extjs中的Ext.grid.Panel隐藏列会显示在表头中解决方法

    在Extjs中的GridPanel会有这样的情况,隐藏列会显示在menuDisabled中,但是这个一般没有什么用处,只是用于后台取值的作用,感兴趣的朋友可以了解下啊,希望本文对你有所帮助   在Ex ...

  4. Android退出程序时的"再按一次退出"实现

    android 个人觉得当用户按下后退键时,出现"再按一次退出"的提示防止误操作比弹出一个对话框是会更人性化的.话不多说上代码: 第一种:重写onKeyDown来监听: long  ...

  5. LintCode "Copy Books"

    Classic DP. The initial intuitive O(k*n^2) solution is like this: class Solution { public: /** * @pa ...

  6. 使用 OWIN 作为 ASP.NET Web API 的宿主

    使用 OWIN 作为 ASP.NET Web API 的宿主 ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动 设备)的 HTTP 服务. ASP.NET ...

  7. js实现windows扫雷(jquery)

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  8. worker_pool的例子

    鉴于poolboy的坑,pooler不支持r18,又有在知乎上看到大神推荐worker_pool这个进程池框架(工作者进程在创建时崩溃,worker_pool不受影响),所以研究了下,贴个小例子 my ...

  9. BOOST的AUTO link机制以及配置

    我们在使用BOOST的时候,如果需要链接一些库,是不用我们手动去链接的,归根结底还是boost的auto_link这个机制,在boost下的auto_link.hpp这个文件夹里面,基本可以看出要根据 ...

  10. 【freemaker】之Unknown built-in variable: now

    Caused by: freemarker.core.ParseException: Unknown built-in variable: now 意思是没有内置变量,看了一下源码2.3.15版本fr ...