这题太坑了,注意格式,]后面还有个空格
cin直接读会被空格隔断,需要用cin.getline读入
getline不能直接写入string,要先写到char[],再赋给string为map作key
cin>>n之后缓冲区里还有一个\n,需要ignore()掉,否则会被getline()读入

#include<iostream>
#include<map>
#include<string>

using namespace std;


int main(){//例题10.8  浙江大学  魔咒词典
	map<string,string> dicA;
	map<string,string> dicB;
	string line;
	char input[100];
	
	while(1){
		cin.getline(input,100);
		line = input;
		 
		if(line=="@END@") break;
		int it = line.find(']');
		string key = line.substr(0,it+1);//是start,length,不是start、end 
		string val = line.substr(it+2,line.size()-1);
		dicA[key] = val;
		dicB[val] = key.substr(1,it-1);
	}
	
	int n;
	string query;
	cin>>n;
	cin.ignore();//把缓冲区里的'\n'清空 
	for(int i=0;i<n;i++){
		cin.getline(input,100,'\n');
        query = input;
		map<string,string>::iterator it;
		if(query[0]=='['){
			it = dicA.find(query);
		} else {
			it = dicB.find(query);
		}
        
		if(it==dicA.end()||it==dicB.end()){
			cout<<"what?"<<endl;
		} else {
			cout<<it->second<<endl;
		}
	}
	return 0;
}