版本一(错数据3、10)
错误原因:题意理解不清,关键字在标题中未必要连续。
该版本代码无法输出下面的内容
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
string trans(string s)
{
for(int i=0;i<s.length();i++)
if(s[i]>='A'&&s[i]<='Z')
s[i]+=32;
return s;
}
struct Paper
{
string title1;
string title2;
int quote;
int index;
};
bool cmp(Paper x,Paper y)
{
if(x.quote!=y.quote) return x.quote>y.quote;
return x.index<y.index;
}
int main()
{
int n;
while(cin>>n&&n)
{
int c=0;
Paper paper[n];
for(int i=0;i<n;i++)
{
cin.get();string s;getline(cin,s);
cin>>paper[c].quote;
paper[c].index=c;//记录输入的顺序
paper[c].title1=s;
paper[c].title2=" "+trans(s)+" ";
c++;
}
int k;cin>>k;cin.get();
for(int search=0;search<k;search++)
{
vector<Paper> result;
string s;getline(cin,s);//输入查询内容
for(int j=0;j<c;j++)
if(paper[j].title2.find(" "+trans(s)+" ")!=string::npos)
result.push_back(paper[j]);
if(result.size()!=0)
{
sort(result.begin(),result.end(),cmp);
for(int i=0;i<(int)result.size();i++)
cout<<result[i].title1<<endl;
}
cout<<"***"<<endl;
}
cout<<"---"<<endl;
}
}
版本二(AC):
#include<iostream>
#include<vector>
#include<sstream>
#include<algorithm>
using namespace std;
string trans(string s)
{
for(int i=0;i<(int)s.length();i++)
if(s[i]>='A'&&s[i]<='Z') s[i]+=32;
return s;
}
struct Paper
{
string title1;
string title2;
int quote;
int index;
};
bool cmp(Paper x,Paper y)
{
if(x.quote!=y.quote) return x.quote>y.quote;
return x.index<y.index;
}
int main()
{
int n;
while(cin>>n&&n)
{
int c=0;
Paper paper[n];
for(int i=0;i<n;i++)
{
cin.get();string s;getline(cin,s);
cin>>paper[c].quote;
paper[c].index=c;//记录输入的顺序
paper[c].title1=s;
paper[c].title2=" "+trans(s)+" ";
c++;
}
int k;cin>>k;cin.get();
for(int search=0;search<k;search++)
{
vector<Paper> result;vector<string> searchWords;
string s,temp;getline(cin,s);//输入查询内容
stringstream in(s);
while(in>>temp)
searchWords.push_back(temp);
for(int j=0;j<c;j++)
{
int cnt=0;
for(int k=0;k<(int)searchWords.size();k++)
if(paper[j].title2.find(" "+searchWords[k]+" ")!=string::npos)
cnt++;
if(cnt==(int)searchWords.size()) result.push_back(paper[j]);
}
if(result.size()!=0)
{
sort(result.begin(),result.end(),cmp);
for(int i=0;i<(int)result.size();i++)
cout<<result[i].title1<<endl;
}
cout<<"***"<<endl;
}
cout<<"---"<<endl;
}
}