这题太坑了,注意格式,]后面还有个空格
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; }