程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ACM練習 題目1029:魔咒詞典 C++ map的使用

ACM練習 題目1029:魔咒詞典 C++ map的使用

編輯:C++入門知識

題目描述:     哈利波特在魔法學校的必修課之一就是學習魔咒。據說魔法世界有100000種不同的魔咒,哈利很難全部記住,但是為了對抗強敵,他必須在危急時刻能夠調用任何一個需要的魔咒,所以他需要你的幫助。       給你一部魔咒詞典。當哈利聽到一個魔咒時,你的程序必須告訴他那個魔咒的功能;當哈利需要某個功能但不知道該用什麼魔咒時,你的程序要替他找到相應的魔咒。如果他要的魔咒不在詞典中,就輸出“what?” 輸入:     首先列出詞典中不超過100000條不同的魔咒詞條,每條格式為:       [魔咒] 對應功能       其中“魔咒”和“對應功能”分別為長度不超過20和80的字符串,字符串中保證不包含字符“[”和“]”,且“]”和後面的字符串之間有且僅有一個空格。詞典最後一行以“@END@”結束,這一行不屬於詞典中的詞條。     詞典之後的一行包含正整數N(<=1000),隨後是N個測試用例。每個測試用例占一行,或者給出“[魔咒]”,或者給出“對應功能”。 輸出:     每個測試用例的輸出占一行,輸出魔咒對應的功能,或者功能對應的魔咒。如果魔咒不在詞典中,就輸出“what?” 樣例輸入: [expelliarmus] the disarming charm [rictusempra] send a jet of silver light to hit the enemy [tarantallegra] control the movement of one's legs [serpensortia] shoot a snake out of the end of one's wand [lumos] light the wand [obliviate] the memory charm [expecto patronum] send a Patronus to the dementors [accio] the summoning charm @END@ 4 [lumos] the summoning charm [arha] take me to the sky 樣例輸出: light the wand accio what? what?     思路很簡單,就是用map保存,再拿出來。 還是不太會用C++,C++的map存放char * 貌似是不行的,自定義的比較函數也不起作用。還望高手指點~ 輸入輸出做的也有點別扭~ [cpp]   #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;               else   www.2cto.com                 cout << "what?" << endl;           } else {               it = map2.find(str);               if (it != map2.end())                   cout << it->second << endl;               else                   cout << "what?" << endl;           }       }          return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved