2. 要求
(1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。 附加要求:读入一段文本文件,统计该文本文件中单词的频率。
(2). 性能分析:
- 对C++代码运行VS的性能分析工具,找出性能问题并进行优化。
- 对Java程序运行性能分析工具 NetBeans IDE 6.0,找出性能问题并进行优化。
4. 作业提示
(1). 定义
- 字母: A-Z, a-z.
- 字母数字: A-Z, a-z, 0-9.
- 分隔符: 非字母数字
- 单词:
- 包含有4个或4个以上的字母
- 单词由分隔符分开
- 如果一个字符串包含_非_字母数字,则不是单词
- 单词大小写不敏感,例如 “file”、“FILE”和“File”可以看作同一个单词
- 单词必须是字母开头,“file123”是单词,“123file”不是单词
(2). 示例
输入
Word is case insensitive, i.e. “file”, “FILE” and “File” are considered the same word.
输出
word: 2
case: 1
insensitive: 1
file: 3
considered: 1
same: 1
预计至少一个下午做完,做起来才发现真的是无从下手……实际上做了八个小时左右。分析要在程序中逐步加入大写改小写、删除非字幕字符、确定字符长度大于等于4、单词频率统计四个程序块。
#include <iostream> #include <vector> #include <algorithm> #include <string> #include <fstream> using namespace std; struct WORD { string word; int num; }; vector<WORD> a; //创建vector对象,a[] int&value(const string&s) { for(int i=0;i<a.size();i++) if(s==a[i].word) return a[i].num; WORD p; p.word=s; p.num=0; a.push_back(p); //在数组a最后添加数据 return a[a.size()-1].num; } int main() { string str; cout << "输入字符串: "; char c; while(c=cin.get()) { if(c>='a' && c<='z' || c>='A' && c<='Z' || c==' ' || c==' ') str+=c; //去除符号 if(c==' ') break; } //输出去掉非英文字符的字符串 for(int j=0;str[j]!='