个人项目-词频统计(语言: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, ...
随机推荐
- java io之管道流
一.java.io中存在一中流叫管道流,类似管道的功能.PipedOutputStream和PipedInputStream分别是管道输出流和管道输入流.这个两个流必须同时使用. 二.作用:进行两个线 ...
- 模板引擎文档 - layui.laytpl 介绍
<!DOCTYPE html> <html class="ui-page-login"> <head> <meta charset=&qu ...
- bootstrap的引入和使用
Bootstrap的下载 一. 使用Bootstrap第一步,先将生成环境的Bootstrap下载下来.然后将下载,然后引入到自己建好的当前目录中 二.点到起步中的基本模板 将看到的整段代码复制粘贴到 ...
- phpstudy操作sql server相关经验
1.去官网http://www.phpstudy.net/下载并安装phpstudy 2.修改php.ini配置文件如下: mssql.secure_connection = onextension= ...
- python学习-day 1
Python开发IDE(工具)Pycharm.eclipse1.循环while 条件 #循环体 #条件为真则执行 #条件为假则执行break用于退出所有循环continue用于退出当前循环 2.Pyc ...
- 「小程序JAVA实战」小程序页面的上拉下拉刷新(50)
转自:https://idig8.com/2018/09/21/xiaochengxujavashizhanxiaochengxuyemiandeshanglaxialashuaxin49/ 之前已经 ...
- C#委托(匿名函数)的各种变形写法
static void TestDelegate() { //类C++11风格:指定初始化容量20,使用初始化列表给部分成员赋值 ) { , , , , -, , }; ; i < lst. ...
- Cloudera Manger CDH 安装文档
简介: Cloudera Manager 是 Cloudera 公司推出的 Hadoop 集群管理工具,通过该管理工具可以方便的部署.配置.监控集群. Cloudera 公司自己发布的 Hadoop ...
- [leetcode]141. Linked List Cycle判断链表是否有环
Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...
- c语言二维数组与指针
问题,以下输出的结果是什么,区别在于哪? void main() { ][] = { ,,,,,,,,,,, }; //输出的3个地址都一样,差别在哪? printf("\n%x" ...