ACM练习 题目1029:魔咒词典 C++ map的使用
#include <stdio.h>#include <string.h>#include <iostream>#include <map>using namespace std;//class StrCompare{//public:// bool operator() (const char* str1, const char* str2) const// { return strcmp(str1, str2) < 0; }//};//map<char *,char *,StrCompare> map1;//map<char *,char *,StrCompare> map2;map<string, string> map1; //保存<魔咒,对应功能>map<string, string> map2; //保存<对应功能,魔咒>int main() {char first;scanf("%c", &first);while (first == '[') {char temp[100]; //用临时变量保存剩下的整行gets(temp);char * text = strchr(temp, ']'); //找到 ] 的位置int len = strlen(temp) - strlen(text);text += 2; //得到后半部分的 char *string value(text);//char value[80];//strcpy(value, text);temp[len] = '\0';string key(temp);//char tempKey[20];//char tempStr[80];//scanf("%s",tempKey);//tempKey[strlen(tempKey)-1] = '\0';//scanf(" ");//gets(tempStr);//cout << temp << endl;//cout << value << endl;//map1.insert(pair<char *,char *>(temp,value));//map2.insert(pair<char *,char *>(value,temp));map1.insert(pair<string, string>(key, value));map2.insert(pair<string, string>(value, key));scanf("%c", &first);}char aaaa[10];gets(aaaa); //把剩余的读取了int n;scanf("%d\n", &n);map<string, string>::iterator it;for (int i = 0; i < n; i++) {string str;getline(cin, str);if (str.at(0) == '[') {str = str.substr(1, str.length() - 2);it = map1.find(str);if (it != map1.end())cout << it->second << endl;elsecout << "what?" << endl;} else {it = map2.find(str);if (it != map2.end())cout << it->second << endl;elsecout << "what?" << endl;}}return 0;}