低頻詞過濾
題目描述:請編寫程序,從包含大量單詞的文本中刪除出現(xiàn)次數(shù)最少的單詞。如果有多個(gè)單詞都出現(xiàn)最少的次數(shù),則將這些單詞都刪除。
輸入數(shù)據(jù):程序讀入已被命名為corpus.txt的一個(gè)大數(shù)據(jù)量的文本文件,該文件包含英文單詞和中文單詞,詞與詞之間以一個(gè)或多個(gè)whitespace分隔。(為便于調(diào)試,您可下載測試corpus.txt文件,實(shí)際運(yùn)行時(shí)我們會(huì)使用不同內(nèi)容的輸入文件。)
輸出數(shù)據(jù):在標(biāo)準(zhǔn)輸出上打印刪除了corpus.txt中出現(xiàn)次數(shù)最少的單詞之后的文本(詞與詞保持原來的順序,仍以空格分隔)。
評(píng)分標(biāo)準(zhǔn):程序輸出結(jié)果必須正確,內(nèi)存使用越少越好,程序的執(zhí)行時(shí)間越快越好。
#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;
}