原需求

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. Web Pages razor 学习

    1. Web Pages razor Web Pages 是三种 ASP.NET 编程模型中的一种,用于创建 ASP.NET 网站和 web 应用程序. 其他两种编程模型是 Web Forms 和 M ...

  2. 【转】SVN的UUID错误

    操作TortoiseSVN时,报如下错误:       Command Update       Repository UUID '62b86956-73d9-2945-ba87-0546d71898 ...

  3. @media_screen

    html,body{ margin:0; padding:0; }body{ background:#0f0;} /* @media screen and (min-width: 800px)and( ...

  4. css3写出0.5px的边框

    一说到0.5px的边框,我们一般认为是不行的,因为在ps中0.5px的线也是做不出来的,这个计算机的像素有关系. 废话不多说了,0.5px 其实用的是css3新特性,box-shadow:阴影设置 代 ...

  5. session.flush加锁测试.

    测试结论 1 session.flush (用于提交SQL执行计划. hibernate会给数据库加锁, 执行效果等同于select for update的锁级别.如果是oracle 默认为lock ...

  6. 程序员书单_UML篇

    UML基础与Rose建模教程 http://download.csdn.net/detail/shenzhq1980/9076199 UML和模式应用1 Applying UML and Patter ...

  7. 【linux】who&&w

    who和w 看到目前服务器所登陆的用户,区别是w能看到更详细的信息. [root@andon tmp]# who admin tty5[tty指本地登陆] 2016-05-27 15:16[登陆时间] ...

  8. android学习笔记48——SQLite

    SQLite SQLite试试一个嵌入式的数据库引擎,专门用于资源有限的设备(如手机.PDA)上适量数据存取. SQLite支持绝大部分SQL92语法,同样允许开发者使用SQL语句操作数据库中的数据, ...

  9. SVN学习之参数定义及设置

    http://jackyrong.iteye.com/blog/238835 conf目录中打开svnserve.conf ,去掉注释,搞成如下这样 [general] anon-access = r ...

  10. VisualSVN Server以及TortoiseSVN客户端的配置和使用方法

    http://www.cnblogs.com/beautifulFuture/archive/2014/07/01/3818211.html 近期学习代码管理工具,首先学习一下svn和Tortoise ...