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

京公网安备 11010502036488号