结对项目— 词频统计(语言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 ...
随机推荐
- C++指针的长度
每台计算机都有字长,指明指针数据的标称大小----来自深入理解计算机系统 每台计算机的字长指明了它的虚拟空间大小.比如32位的机器,虚拟空间地址为0~2^w-1程序最多访问2^w个字节 对于32位程序 ...
- 好记性比如烂笔头--linux学习笔记7关于linux中的shell脚本编程
之前看的各种面试,貌似都有shell脚本编程,没了解之前感觉很复杂,现在了解了些,没想象中那么难. 逻辑主要是这样的 编写.sh的脚本文件,文件里面的代码,就是在命令行输入的可执行命令的加强版,所谓加 ...
- 好记性不如烂笔头-linux学习笔记6keepalived实现主备操作
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工 ...
- verilog 计算机网络 仿真 激励 pcap
做verilog网络逻辑时,需要产生正确的数据包格式激励,手写激励真烦人,现在让testbench读取pcap文件,则可以精确还原数据包的bit与时序,省去了一大批麻烦 1.设计读取逻辑 `times ...
- centos7.3 防火墙设置
1.查看firewall服务状态 systemctl status firewalld 2.查看firewall的状态 firewall-cmd --state 3.开启.重启.关闭.firewall ...
- Spring-JDBC模板-事务
Spring-JDBC模板-事务 1.事务概述 什么是事务 逻辑上的一组操作,组成这组操作的各个单元要么全部成功要么全部失败 事务的特点ACID 原子性:事务不可分割(事务要么成功,要么失败) 一致性 ...
- java中将数字的字符串表示转化为数字
int a = new Integer("1234").intValue() 或 int b = Integer.parseInt("1234") System ...
- Gtk-WARNING **: cannot open display: :0.0之解决
当使用su 到另外一个用户运行某个程序,而这个程序又要有图形显示的时候,就有可能有下面提示: root@dt:~# sudo -i -u keji google-chrome No protocol ...
- Jdeveloper下Svn的使用
Jdeveloper下Svn的使用 官方pdf:jdeveloper使用svn 官方网地址:http://www.oracle.com/technetwork/cn/java/subversion-0 ...
- Golang之一个简单的聊天机器人
翠花,上代码 package main import ( "bufio" "fmt" "os" "strings" ) ...