题解 | 魔咒词典
#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的时候要分析一下是否存在这个回车,这里根据输入可以看到一定是存在的,那么我们一定要清除一下,否则下面的获取是错误的