题解 | 魔咒词典

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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务