词频统计 (个人项目)

要求

(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. Python请求外部POST请求,常见四种请求体

    原文http://blog.csdn.net/silencemylove/article/details/50462206 HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-bo ...

  2. 关于jQuery的$.proxy()应用.

    今天在看<<锋利的jQuery>>时看到了proxy()的使用,感觉很模糊,就到处找资料. jQuery的源码也没看明白. 不过总算明白了proxy的用法了; <inpu ...

  3. 第10课 初探 Qt 中的消息处理

    1. Qt消息模型 (1)Qt封装了具体操作系统的消息机制 (2)Qt遵循经典的GUI消息驱动事件模型 2. 信号与槽 (1)Qt中定义了与系统消息相关的概念 ①信号(Signal):由操作系统产生的 ...

  4. 【转载】Python ConfigParser的使用

    1.基本的读取配置文件-read(filename) 直接读取ini文件内容-sections() 得到所有的section,并以列表的形式返回-options(section) 得到该section ...

  5. Electron 前端页面导入jQuery 出现错误Uncaught ReferenceError: jQuery is not defined

    如下: <script src="../assets/js/jquery-1.10.2.js"></script> 方法1 改为: <script&g ...

  6. 分布式锁实践(一)-Redis编程实现总结

    写在最前面 我在之前总结幂等性的时候,写过一种分布式锁的实现,可惜当时没有真正应用过,着实的心虚啊.正好这段时间对这部分实践了一下,也算是对之前填坑了. 分布式锁按照网上的结论,大致分为三种:1.数据 ...

  7. Selenium2+python自动化64-100(大结局)[已出书]

    前言 小编曾经说过要写100篇关于selenium的博客文章,前面的64篇已经免费放到博客园供小伙伴们学习,后面的内容就不放出来了,高阶内容直接更新到百度阅读了. 一.百度阅读地址: 1.本书是在线阅 ...

  8. C++中构造函数作用

    一. 构造函数是干什么的 class Counter { public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value = ; } ...

  9. 6 MySQL--表--完整性约束

    参考:https://www.cnblogs.com/alice-bj/p/8824693.html 完整性约束: http://www.cnblogs.com/linhaifeng/articles ...

  10. JavaWeb--过滤器Filter (一)

    过滤器是在服务器上运行的,并且位于请求和响应中间起过滤功能的程序.其工作原理如下图所示:   在与过滤器相关联俄Servlet或JSP运行前,过滤器先执行.一个过滤器可以一个或多个Servlet或JS ...