//算法思路:先构建库,然而切分,再次构建Map,最后读取。 //substr(0,2) 取出子串 而且是双闭区间!! //fgets(line,200,stdin) 读入了 \n 换行符 //fgets后面用 line1.pop_back() 去掉最后的\n /* 1.输入 int n,后面读字符串,赶紧用 getchar(); 读取\n 2. 字符串比较 == 用“ ” 重要:如果是line[0]则比较的 是 ' ' 字符串!!! 3.这个代码 需要部分,部分调试 */ #include<map> #include<string> #include<cstdio> using namespace std; int main() { map<string,string>dict; //魔咒---功能 while(true){ //库 char magic[200]; fgets(magic, 200, stdin); string cmagic= magic; cmagic.pop_back(); if(cmagic=="@END@"){ break; } else { string cmagic2 = cmagic.substr(0,cmagic.find(']')+1); //魔咒 string cmagic3 = cmagic.substr(cmagic.find(']' )+ 2); //功能 dict[cmagic2]=cmagic3; dict[cmagic3]=cmagic2; } } int n; scanf("%d",&n); getchar(); for(int i = 0 ;i<n;i++){ char line[200]; fgets(line,200,stdin); string line1 = line; line1.pop_back(); if(dict.find(line1) != dict.end()){ //存在某个功能或者咒语: dict是map,magic2,3 if(line[0] == '[' ){ //咒语! printf("%s\n",dict[line1].c_str()); } else{ printf("%s\n",dict[line1].substr(1,dict[line1].find(']')-1).c_str()); } } else{printf("what?\n");} } }