您的位置:首页 > 其它

百度的高级搜索方法 (2007 年初赛)

2008-05-26 23:11 337 查看
别的都不说了,除了该程序的出处:http://hi.baidu.com/xun1573/blog/item/6475cbd3da763031970a16be.html




/**//*


百度的高级搜索方法(2007年初赛)




题面描述:


你尝试过在百度上使用site inurl语法查询吗? 如果还没有的话可以试一下:)


如输入 site:www.baidu.com inurl:news


则会搜出所有在www.baidu.com站点上的包含"news"子串的url。


现在我们有两份数据,一份是site_inurl.txt 一份是url.txt


site_inurl.txt中每行是一个site inurl语法组成的查询串,url.txt中保存的是url列表。


你能否在url列表中找出所有能被site_inurl.txt中的查询串检索到的url?






如site_inurl.txt内容如下:


site:www.baidu.com inurl:/more


site:zhidao.baidu.com inurl:/browse/


site:www.sina.com.cn inurl:www20041223am




url.txt内容如下:

http://www.baidu.com/more/
http://www.baidu.com/guding/more.html
http://www.baidu.com/events/20060105/photomore.html
http://hi.baidu.com/browse/
http://hi.baidu.com/baidu/
http://www.sina.com.cn/head/www20021123am.shtml
http://www.sina.com.cn/head/www20041223am.shtml



则你的程序运行完输出的结果应该为:

http://www.baidu.com/more/
http://www.baidu.com/guding/more.html
http://hi.baidu.com/browse/
http://www.sina.com.cn/head/www20041223am.shtml



程序以命令行形式传入这两个文件名,第一个参数为site_inurl文件对应的文件名,第二个参数为url




列表对应的文件名,程序的输出请输出到标准输出。


*/


#include<iostream>


#include<fstream>


#include<vector>


#include<string>


#include<cstdlib>


#include<iterator>


#include<algorithm>


using namespace std;




int main(int argc,char* argv[])




...{


string s;


vector<string> v;


ifstream fin(argv[1]);


if(!fin.is_open())




...{


cerr<<"Open fail!";


exit(0);


}


while(getline(fin,s))




...{


s=s.substr(s.find_last_of(':')+1);


v.push_back(s);


}


fin.close();


fin.clear();




fin.open(argv[2]);


if(!fin.is_open())




...{


cerr<<"Open fail!";


exit(0);


}


while(fin>>s)




...{


for(vector<string>::iterator i=v.begin();i!=v.end();++i)


if(s.find(*i)!=string::npos)




...{


cout<<s<<endl;


break;


}


}


fin.close();




system("pause");


return 0;


}

程序测试成功。当然测试文件比较小,不知道文件大了的话效率怎么样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: