题目大意:给出一系列要忽略的单词,这些单词以外的单词都看作关键字。然后给出一些标题,找出标题中所有的关键字,然后按这些关键字的字典序给标题排序。相同关键字出现在不同标题中,出现在输入较前位置的标题排在前面;同一个关键字在一个标题中出现多次,关键字位于较前位置的排在前面。
分析:按行读入,对每行中出现的关键词和这这行用multimap存储,最后输出就可以了。
总结:水题,用的函数库中的函数比较多,还有STL。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <map>
#include <set>
using namespace std;
int main()
{
set<string> ignore;
multimap<string, string> r;
string t;
while (getline(cin, t) && t != "::")
ignore.insert(t);
while (getline(cin, t))
{
for (int i = 0; i < t.size(); i++)
t[i] = tolower(t[i]);
for (int i = 0; i < t.size(); i++)
{
if (!isalpha(t[i]))
continue;
string t2;
int j = i;
while (isalpha(t[j]))
{
t2 += t[j];
j++;
}
if (!ignore.count(t2))
{
for (int k = 0; k < t2.size(); k++)
t2[k] = toupper(t2[k]);
string t3 = t;
t3.replace(i, t2.size(), t2);
r.insert(make_pair(t2, t3));
}
i = j;
}
}
for (map<string, string> :: iterator i = r.begin(); i != r.end(); i++)
cout << i->second << endl;
return 0;
}