个人项目-词频统计(语言:C++)
词频统计 (个人项目)
要求
(1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。 附加要求:读入一段文本文件,统计该文本文件中单词的频率。
(2). 性能分析:
- 对C++代码运行VS的性能分析工具,找出性能问题并进行优化。
- 对Java程序运行性能分析工具 NetBeans IDE 6.0,找出性能问题并进行优化。
开发语言:C++
各个模块时间(预估/实际)(本来预估3-4h可完成,但实际花了将近6-7h)
| 预估时间 | 实际时间 | |
| 词频统计 | 1.5h | 1.5h |
| 大小写转换 | 0.75h | 1h |
| 长度小于4的单词删除 | 0.75h | 1.5h |
| 多个分隔符区分 | 1h | 2h |
由于上一次老师提过代码的规范性,所以这一次的代码我特意注意了代码的书写规范。
下面是源代码:
#include <iostream>
#include <string>
using namespace std; struct Word /* 单词对象 */
{
Word() : Str( "" ), Count( )
{
}
string Str;
int Count;
}; void CalcCount( Word *words, string &content, int size ) /* 统计词频 */
{
int i; /* words单词 content内容 size个数 */
for ( i = ; i < size; i++ )
{
if ( words[i].Str == content )
{
words[i].Count++;
return;
}else if ( words[i].Str == "" )
break;
}
words[i].Str = content;
words[i].Count = ;
} int main()
{
char ch;
Word *words;
string content;
cout << "输入一段英文:";
getline( cin, content );
while ( cin.get( ch ) ) /* 把所有小写字母换成大写字母 */
{
ch = cin.get(); /* 此部分存疑,可能是输入问题,这一部分无法实现 */
if ( <= ch && ch <= )
{
char (ch) = char(ch - );
break;
}
} int wCount = ; /* 计算单词总数 */
if ( content.length() < ) /* 长度小于4的单词删除 */
{
wCount--;
content.erase( , offset + );
offset = content.find( ' ' );
continue;
}
for ( unsigned int i = ; i < content.length(); i++ )
{
if ( content[i] == ' ' || content[i] == '\t' || content[i] == '\n' || content[i] == '.' || content[i] == ',' )
wCount++; /* 分隔符分为' ','\t','\n',',','.'五种 */
}
words = new Word[wCount]; string::size_type offset = content.find( ' ' || '\t' || '\n' || '.' || ',' ); /* 单词以分隔符隔开 */
while ( offset != string::npos )
{
string wStr = content.substr( , offset );
content.erase( , offset + );
CalcCount( words, wStr, wCount );
offset = content.find( ' ' || '\t' || '\n' || '.' || ',' );
}
CalcCount( words, content, wCount ); for ( int j = ; j < wCount; j++ ) /* 最后输出结果 */
{
cout << words[j].Str << ":" << words[j].Count << endl;
}
delete[] words;
return();
}
运行结果(老师给的例子):

我的分析:
由上图可以看出,结果并不完全正确,我的代码里面,小写字母全部转换成大写字母那一块出了问题。我前前后后大概改了十几次,也翻阅了C++书,我觉得可能是输入读取出了问题,但是怎么改都无济于事,这个问题算是存疑,之后我会借助同学或者老师的力量解决这个问题的。
我的总结:
由于JAVA的初步学习我觉得还不够让我写出这样一个程序,所以我还是选择了C++语言写了这个程序。这次源代码,我花的时间比预计的时间多了很多,一部分原因是C++知识的疏漏和遗忘,另一部分原因就是题目的要求细节的难度比较高。这个词频统计的题目,虽然以前做过字母的统计,大小写转换,分隔符区分等等程序,但是要写出这个充满细节需要的程序,确实难上加难,甚至我最后还存了疑,在小写字母全部转换成大小字母这儿问题上,并没有完全解决,短时间内可能再卡在这里,所以我选择之后借助一个同学和老师的力量解决。
github链接:https://github.com/liuyutianlyt/CalcCount.md
个人项目-词频统计(语言:C++)的更多相关文章
- 结对项目— 词频统计(语言C++)
结对对象:季天梦 博客地址:http://www.cnblogs.com/jitianmeng/ github链接:https://github.com/liuyutianlyt/EX_4.md 比例 ...
- 作业3-个人项目<词频统计>
上了一天的课,现在终于可以静下来更新我的博客了. 越来越发现,写博客是一种享受.来看看这次小林老师的“作战任务”. 词频统计 单词: 包含有4个或4个以上的字 ...
- 软件工程第一次个人项目——词频统计by11061153柴泽华
一.预计工程设计时间 明确要求: 15min: 查阅资料: 1h: 学习C++基础知识与特性: 4-5h: 主函数编写及输入输出部分: 0.5h: 文件的遍历: 1h: 编写两种模式的词频统计函数: ...
- 个人项目----词频统计WEB(部分功能)
需求分析 1.使用web上传txt文件,对上传的txt进行词频统计. 2.将统计后的结果输出到web页面,力求界面优美. 3.在界面上展示所给url的文章词频统计,力求界面优美. 3.将每个单词同四. ...
- 结对项目— 词频统计2(语言C++)
结对对象:季天梦 博客地址:http://www.cnblogs.com/jitianmeng/ github链接:https://github.com/liuyutianlyt/EX_4.md 比例 ...
- task4:结对项目-词频统计
结对人:周楠 思路:利用TreeMap实现key字典序,然后输出到LinkedList,然后用Comparator,实现字典值从大到小排序,但是key实现值相同的key字典序的想出的实现方法,但是一直 ...
- C语言词频统计设计
项目需求: 1.设计一个词频统计小软件,对给定的英文文章进行单词频率的统计. 2.文章中相应的标点不计入统计. 3.将统计结果以从大到小的排序方式输出. 设计: 1.因为功能相对简单,采用C语言直接进 ...
- C语言实现词频统计——第二版
原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命 ...
- c语言实现词频统计
需求: 1.设计一个词频统计软件,统计给定英文文章的单词频率. 2.文章中包含的标点不计入统计. 3.将统计结果以从大到小的排序方式输出. 设计: 1.因为是跨专业0.0···并不会c++和java, ...
随机推荐
- request 里面参数设置 (有空瞄下)
Requests 是用python语言编写的第三方库,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,完全满足 HTTP 测试需求, ...
- Bootstrap-CL:列表组
ylbtech-Bootstrap-CL:列表组 1.返回顶部 1. Bootstrap 列表组 本章我们将讲解列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: ...
- Mac上如何把图片中的文字转换成word/pdf文字
如何把图片文字转换成word文字? - 知乎 https://www.zhihu.com/question/25488536 在 OneNote for Mac 中插入的圖片複製文字 - OneNot ...
- mysql-2 数据类型
mysql中定义数据字段的类型对数据库的优化是非常重要的. mysql数据类型大致分为三类:数值.日期/时间.字符串(字符)类型. 数值类型 MySQL支持所有标准SQL数值数据类型. 这些类型包括严 ...
- C++ 排序总结
原帖地址 http://kongec.blog.sohu.com/85141353.html 附 六分钟演示15中算法 http://www.guokr.com/post/482666/ 一.插入排 ...
- 使用docker快速搭建环境-安装mysql
install docker sudo apt-get install -y docker.io download mysql sudo docker pull mysql start mysql s ...
- 七、配置ssh keys连通github跟ssh-agent
jenkins+github配置完成后,能够实现在提交pull request或者直接push时,能够将提交的代码拉去一份到服务器本地,并自动merge:但是代码拉去下来了,部署环境的时候却需要输入登 ...
- echart改变legend样式及分页
legend: { type: 'scroll', orient: 'horizontal', bottom:0, left:'center', itemGap: 0, itemWidth: 10, ...
- 使用打印方法时,要先引用命名空间: Using System.Drawing.Pringing
使用打印方法时,要先引用命名空间: Using System.Drawing.Pringing PrintDocument类的重要属性和方法:属性:DocumentName 设置打印文档时要显示的文 ...
- 你真的了解lambda吗?一文让你明白lambda用法与源码分析
本文作者: cmlanche 本文链接: http://www.cmlanche.com/2018/07/22/lambda用法与源码分析/ 转载来源:cmlanche.com 用法 示例:最普遍的一 ...