结对项目— 词频统计(语言C++)
结对对象:季天梦
博客地址:http://www.cnblogs.com/jitianmeng/
github链接:https://github.com/liuyutianlyt/EX_4.md
比例:1:1 
要求
- [必做 1] 基于作业3的结果,读取一个较小的文本文件A_Tale_of_Two_Cities.txt,统计该文件中的单词的频率,并将统计结果输出到当前目录下的 Result1.txt 文件。 (第一阶段初稿完成该要求)
- 命令行格式: 提示符> Myapp.exe -f filename.txt > Result.txt (PS:C++ 程序,Java 程序输出方式类似) filename.txt 为前面下载的文件名。
- 解释:
- 选项 -f 表示后面跟文件名
- 输出格式规定(参考作业3中的示例):
- 首先按照频率由高到低排序
- 频率一样的词, 按照字典顺序排序
- 此外, 读取一个较大的文本文件Gone_with_the_wind.txt实验对比程序执行效率,做如下改进,比较改进前后程序执行时间。PS: 请看一位同学做的效能分析示例。
源程序如下:
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std; struct WORD { /* 创建一个结构体 */
int count;
char s;
void exchange( Word &word ) /* 交换单词 */
{
string tStr = word.Str;
int tCount = word.Count;
word.Str = Str;
word.Count = Count;
Str = tStr;
Count = tCount;
}
};
} w[]; bool isword( char a[] ) /* 判断是否是一个单词 */
{
int i = ;
for ( i = ; a[i] != '\0'; i++ )
if ( (a[i] >= 'a' && a[i] <= 'z') || (a[i] >= '' && a[i] <= '') )
return(true);
else
return(false);
} int judge( char b[], int n ) /* 判断该单词是否出现过 */
{
if ( n > )
for ( int i = ; i < n; i++ )
{
if ( !strcmp( b, &w[i].s ) ) /* 出现 */
{
w[i].count++;
return(-);
}
}
} void SortWordDown( Word * words, int size ) /* 降序排序 */
{
for ( int i = ; i < size; i++ )
{
for ( int j = ; j < size - ; j++ )
{
if ( words[j].Count < words[j + ].Count )
{
words[j].exchange( words[j + ] );
}
}
}
} int main( void )
{
char result[]; char *ptr;
ifstream file( "c://A_Tale_of_Two_Cities.txt" ); /* 读取 */
if ( !file )
{
cout << "不能打开文件";
}
while ( !file.eof() )
{
file.getline( result, );
}
file.close();
int j = ; /* 大写转小写 */
while ( result[j] != '/0' && result[j + ] != '/0' )
{
if ( result[j] >= 'A' && result[j] <= 'Z' )
{
result[j] = result[j] - 'A' + 'a';
j++;
}
}
cout << result;
char *sep = " "; int i = ;
ptr = strtok( result, " " ); /* 利用strtok函数来分割result字符串中的单词 */
while ( ptr != NULL )
{
if ( isword( p ) != false )
{
if ( judge( p, n ) != false )
{
w[n].s = *p; /* 赋值给数组 */
n++;
}
}
ptr = strtok( NULL, " " );
}
int t = ;
ofstream outfile; /* 输出文件到result1 */
outfile.open( "Result1.txt" )
SortWordDown( w, count );
while ( w[t].s ) /* 输出统计结果 */
{
if ( strlen( w[t].s ) >= )
{
outfile << w[t].s << ":" << w[t].count << '\n';
t++;
}
}
return();
}
结果如下:

总结:由于是团队协作,我们在之前作业三的基础上就有程序上的不同,看对方程序也是一个学习过程。最后整合了两个程序之后,又一起讨论完成了作业四的要求。
结对项目— 词频统计(语言C++)的更多相关文章
- 个人项目-词频统计(语言:C++)
词频统计 (个人项目) 要求 (1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率. 附加要求:读入一段文本文件,统计该文本文件中单词的频率. (2) ...
- 结对项目— 词频统计2(语言C++)
结对对象:季天梦 博客地址:http://www.cnblogs.com/jitianmeng/ github链接:https://github.com/liuyutianlyt/EX_4.md 比例 ...
- task4:结对项目-词频统计
结对人:周楠 思路:利用TreeMap实现key字典序,然后输出到LinkedList,然后用Comparator,实现字典值从大到小排序,但是key实现值相同的key字典序的想出的实现方法,但是一直 ...
- 作业3-个人项目<词频统计>
上了一天的课,现在终于可以静下来更新我的博客了. 越来越发现,写博客是一种享受.来看看这次小林老师的“作战任务”. 词频统计 单词: 包含有4个或4个以上的字 ...
- 软件工程第一次个人项目——词频统计by11061153柴泽华
一.预计工程设计时间 明确要求: 15min: 查阅资料: 1h: 学习C++基础知识与特性: 4-5h: 主函数编写及输入输出部分: 0.5h: 文件的遍历: 1h: 编写两种模式的词频统计函数: ...
- 个人项目----词频统计WEB(部分功能)
需求分析 1.使用web上传txt文件,对上传的txt进行词频统计. 2.将统计后的结果输出到web页面,力求界面优美. 3.在界面上展示所给url的文章词频统计,力求界面优美. 3.将每个单词同四. ...
- task4: 结对编程-词频统计[修改版]
问题描述: 读取一个文件,统计其中单词出现次数,并按从高到低的顺序显示,相同顺序的字典序排列. 思路: 基于上次的程序用正则提取出文本里的单词,然后利用字典计数(先get,为null则置1,不为nul ...
- 软工结对项目之词频统计update
队友 胡展瑞 031602215 作业页面 GitHub 具体分工 111500206 赵畅:负责WordCount的升级,添加新的命令行参数支持(自定义输入输出文件,权重词频统计,词组统计等所有新功 ...
- 结对&词频统计
结对编程 Pathner 濮成林(博客:http://www.cnblogs.com/charliePU/) 1.词频统计 环境依赖: 开发环境.myeclipse 2013, jdk1.7.0_04 ...
随机推荐
- ESN
1.对于一般的硬件设备,ESN是设备序列号,主要用来识别设备,包括未来服务鉴权的需要 2.对于需要license的设备,ESN也是设备序列号的意思,只不过这个序列号可能是根据设备硬件信息算出来的一串字 ...
- web前端知识体系大全【欢迎补充】
大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的是想要颠覆人 ...
- 精《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #7 Cgroup、Namespace、Linux容器
HACK #7 Cgroup.Namespace.Linux容器 本节将介绍Cgroup与Namespace以及通过这两个功能实现的容器功能.CgroupCgroup(control group)是将 ...
- Rhythmk 学习 Hibernate 02 - Hibernate 之 瞬时状态 离线状态 持久化状态 三状态
by:rhythmk.cnblogs.com 1.Hibernate 三种状态: 1.1.三种定义(个人理解,不一定准确): 瞬时状态(transient): 不被session接管,且不存在 ...
- docker 基本使用和安装提速
https://www.cnblogs.com/Erik_Xu/p/6662936.html#redis >yum install -y docker 道客提速 先安装curl >yum ...
- oracle 安装包
Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit ...
- asp.net webapi 参数绑定总结
首先必须得更正下自己一直以来对于get请求和post请求理解的一个误区:get请求只能通过url传参,post请求只能通过body传参. 其实上面的理解是错误的,翻阅了不少资料及具体实践,正确理解应该 ...
- JavaScript中call,apply,bind方法
why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user:"追梦子", fn:f ...
- FP扣损耗逻辑代码
芯片172没有扣减损耗, 取数:SAP_STPO的AUSCH IN_BOM_DETAILS:耗损比例COMPONENT_YIELD_UOM 存储过程FP_MO2SAP:supplydmdpeg ...
- 关于在线文本编辑器防XSS注入攻击问题
跨站脚本攻击,又称XSS代码攻击,也是一种常见的脚本注入攻击.例如在下面的界面上,很多输入框是可以随意输入内容的,特别是一些文本编辑框里面,可以输入例如<script>alert('这是一 ...