浪迹天涯

唯有努力...
努力....再努力...

低频词过滤

低频词过滤

题目描述:请编写程序,从包含大量单词的文本中删除出现次数最少的单词。如果有多个单词都出现最少的次数,则将这些单词都删除。

输入数据:程序读入已被命名为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;

}

posted on 2008-01-04 12:03 浪迹天涯 阅读(1427) 评论(1)  编辑 收藏 引用 所属分类: C++

评论

# re: 低频词过滤 2011-08-28 11:59 w2j3s8

"v.end()"

avoid calling things like this in every iteration - v.end(), a.end(), etc.  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(22)

随笔分类(30)

随笔档案(29)

文章分类

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜