求助,关于一个c++词频统计编程代码
课程设计任务书
课程名称:C++课程设计
设计题目:词频统计
问题描述
给定一篇英文文本,要求提取其中所有的单词并计算其一元词频(某个单词出现的次数)和二元词频(两个连续单词出现的次数)
举例:I have an apple . And you have an apple , too .
输出: i--1,have--2,an--2,apple--2,and--2,you--1,too--1
an apple--2
基本要求
(1)去除标点(给定文本中只含英文逗号和句号,不分段分行)
(2)全部单词转化为小写
(3)统计词频并输出结果至文件,同一单词的不同形式(比如have和had)视为不同单词
(4)程序可读性好,有简单交互界面,代码可读性好
实现提示
(1) 学习字符串和文件相关操作
(2) 使用getline函数读取单词(包含符号),筛选和处理后进行存储和计数
(3) 可以使用STL
选作内容
手动建立单词词形词典,使软件可参考词典将同一单词的不同形式转换为同一单词的原型(例如将have、has、had都转换为have),然后进行词频统计。词形词典要求从文件中读取以实现可扩充性。
[解决办法]
代码如下:使用stl做的,应该可以用的!
#include <iostream>#include <fstream>#include <string>#include <algorithm>#include <cctype> #include <map>using namespace std;void main(void) { ; ifstream input("d:\\1.txt"); string str; map<string,int> string_count ; while(input>>str){ if(str!="."&&str!=","){ // 去掉 标点符号 暂定为只有.与, transform(str.begin(), str.end(), str.begin(), tolower); ++string_count[str]; } } map<string,int>::iterator it=string_count.begin(); cout<<"字符串"<<" "<<"出现次数"<<endl; while(it!=string_count.end()){ cout<<it->first<<" "<<it->second<<endl; it++; } input.close();}