这道题可以使用哈希的思想,首先将数据映射好,然后根据查询的关键字进行判断,注意,输入样例中有很多空格,因此需要一行一行读,要不然会出错:
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
string str;
map<string, string> m;
while(getline(cin, str)){
if(str == "@END@") break;
int position = str.find(']');
string str1 = str.substr(0, position + 1);
string str2 = str.substr(position + 2);
m.insert(pair<string, string>(str1, str2));
}
int n;
scanf("%d", &n);
getchar();
while(n--){
getline(cin, str);
if(str[0] == '['){
if(m[str] == "") cout<<"what?"<<endl;
else cout<<m[str]<<endl;
}else{
map<string, string>::iterator it;
for(it = m.begin(); it != m.end(); it++){
if(it->second == str){
cout<<it->first.substr(1, it->first.size() - 2)<<endl;
break;
}
}
if(it == m.end()) cout<<"what?"<<endl;
}
}
return 0;
}