题解 | 魔咒词典
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
map<string,string>mymap;
string s;
while(1){
getline(cin,s);
if(s=="@END@")break;
int pos=s.find("]");//分界
mymap[s.substr(0,pos+1)]=s.substr(pos+2);
mymap[s.substr(pos+2)]=s.substr(0,pos+1);
}
int m;
scanf("%d",&m);
getchar();//
string key;
while(m--){//查询
getline(cin,key);
string ans=mymap[key];
if(ans=="")ans="what?";
else if(ans[0]=='['){
ans=ans.substr(1,ans.size()-2);
}
cout<<ans<<endl;
}
return 0;
}
这个可以用两个映射,这样的话,最后的判断逻辑要难写一点,我这个写法,好搜,搜出来只需要判断一下0index是否为[即可,这里可能有部分同学不明白为什么要getchar(),这是缓冲区原理,输入缓冲区里面如果输入了一行n,那么\n是并未取走的,所以用getline的时候要分析一下是否存在这个回车,这里根据输入可以看到一定是存在的,那么我们一定要清除一下,否则下面的获取是错误的