低频词过滤
题目描述:请编写程序,从包含大量单词的文本中删除出现次数最少的单词。如果有多个单词都出现最少的次数,则将这些单词都删除。
输入数据:程序读入已被命名为corpus.txt的一个大数据量的文本文件,该文件包含英文单词和中文单词,词与词之间以一个或多个whitespace分隔。(为便于调试,您可下载测试corpus.txt文件,实际运行时我们会使用不同内容的输入文件。)
输出数据:在标准输出上打印删除了corpus.txt中出现次数最少的单词之后的文本(词与词保持原来的顺序,仍以空格分隔)。
评分标准:程序输出结果必须正确,内存使用越少越好,程序的执行时间越快越好。
#include<fstream>
#include<string>
#include<vector>
#include<map>
using namespace std;
map<string,int>a;
vector<string>v;
int main()
{
int m;
string s;
map<string,int>::iterator p;
vector<string>::iterator i;
fstream file("corpus.txt");
while (file>>s)
{
v.push_back(s);
++a[s];
}
file.close();
m=a.begin()->second;
for (p=++a.begin();p!=a.end();++p)
if (p->second<m)
m=p->second;
for (i=v.begin();i!=v.end();++i)
if (a[*i]!=m)
break;
if (i!=v.end())
{
printf("%s",i->c_str());
for (++i;i!=v.end();++i)
if (a[*i]!=m)
printf(" %s",i->c_str());
}
printf("\n");
return 0;
}