词频统计 (个人项目)

要求

(1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。 附加要求:读入一段文本文件,统计该文本文件中单词的频率。

(2). 性能分析:


开发语言: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++)的更多相关文章

  1. 结对项目— 词频统计(语言C++)

    结对对象:季天梦 博客地址:http://www.cnblogs.com/jitianmeng/ github链接:https://github.com/liuyutianlyt/EX_4.md 比例 ...

  2. 作业3-个人项目<词频统计>

    上了一天的课,现在终于可以静下来更新我的博客了.       越来越发现,写博客是一种享受.来看看这次小林老师的“作战任务”.                词频统计 单词: 包含有4个或4个以上的字 ...

  3. 软件工程第一次个人项目——词频统计by11061153柴泽华

    一.预计工程设计时间 明确要求: 15min: 查阅资料: 1h: 学习C++基础知识与特性: 4-5h: 主函数编写及输入输出部分: 0.5h: 文件的遍历: 1h: 编写两种模式的词频统计函数: ...

  4. 个人项目----词频统计WEB(部分功能)

    需求分析 1.使用web上传txt文件,对上传的txt进行词频统计. 2.将统计后的结果输出到web页面,力求界面优美. 3.在界面上展示所给url的文章词频统计,力求界面优美. 3.将每个单词同四. ...

  5. 结对项目— 词频统计2(语言C++)

    结对对象:季天梦 博客地址:http://www.cnblogs.com/jitianmeng/ github链接:https://github.com/liuyutianlyt/EX_4.md 比例 ...

  6. task4:结对项目-词频统计

    结对人:周楠 思路:利用TreeMap实现key字典序,然后输出到LinkedList,然后用Comparator,实现字典值从大到小排序,但是key实现值相同的key字典序的想出的实现方法,但是一直 ...

  7. C语言词频统计设计

    项目需求: 1.设计一个词频统计小软件,对给定的英文文章进行单词频率的统计. 2.文章中相应的标点不计入统计. 3.将统计结果以从大到小的排序方式输出. 设计: 1.因为功能相对简单,采用C语言直接进 ...

  8. C语言实现词频统计——第二版

    原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命 ...

  9. c语言实现词频统计

    需求: 1.设计一个词频统计软件,统计给定英文文章的单词频率. 2.文章中包含的标点不计入统计. 3.将统计结果以从大到小的排序方式输出. 设计: 1.因为是跨专业0.0···并不会c++和java, ...

随机推荐

  1. java web 程序---javaBean

    1.JavaBean 是Java中的一个组件技术,类似于微软的COM组件 SUN公司将JavaBean定义为:可以重复利用的软件组件 2.JavaBean的种类:a.可视化JavaBean   b.非 ...

  2. [转]Java IDE 之 IntelliJ IDEA 2017

    参考链接1:http://blog.csdn.net/u012364631/article/details/47682011 IDEA Community(社区版) 使用Maven创建Web工程 并部 ...

  3. 自动手动随便你 Win7驱动程序安装自己设

    Win7系统是非常智能方便的操作系统,可以自动安装硬件驱动程序,为用户提供了很多方便.但是并不是所有的驱动程序和硬件都能完美兼容,如果不合适就需要卸载了重新安装:还有一些朋友就习惯自己安装驱动,那么, ...

  4. Go语言并发编程总结

    转自:http://blog.csdn.net/yue7603835/article/details/44309409 Golang :不要通过共享内存来通信,而应该通过通信来共享内存.这句风靡在Go ...

  5. PyDev for eclipse 插件下载地址

    PyDev for eclipse 插件下载地址http://sourceforge.net/projects/pydev/files/pydev/python解释器以及python类库下载地址htt ...

  6. django2.0新增功能流程

    1先在 models.py中,创建字段相关的内容,我这里添加一个博客分类的表 定义数据结构的地方 class PostType(models.Model): title = models.CharFi ...

  7. OpenMP n 体问题

    ▶ <并行程序设计导论>第六章中讨论了 n 体问题,分别使用了 MPI,Pthreads,OpenMP 来进行实现,这里是 OpenMP 的代码,分为基本算法和简化算法(引力计算量为基本算 ...

  8. LevelDB 的缺憾

    [LevelDB 的缺憾] 1.Snapshots 只能通过 DB::GetSnapshot() 创建,意即只能创建当下的 Snapshot. 2.

  9. 2015年传智播客JavaEE 第168期就业班视频教程03-ERP简介(2)

    资源管理这块的东西大家基本上能够猜个差不多了.下面描述描述计划.计划这个东西把企业资源这个东西提升了不只十倍二十倍了.ERP的核心是计划,但是这次我们做是不做计划的.今年我们是一个生产型企业,我们要开 ...

  10. 用 AutoHotKey 随时记录所想

    别被标题咋呼了,其实很简单,按下快捷键自动打开指定文本文档,自动加上当前时间日期,适合像我这种无聊的人记录生活. ;Alt+X 调出 !X:: ;获取当前日期时间并保存到剪贴板 d = @rhinoc ...