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

别的都不说了,除了该程序的出处: 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;
}

程序测试成功。当然测试文件比较小,不知道文件大了的话效率怎么样
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值