1029_魔咒詞典
2019-11-11 07:27:19
供稿:網友
// 1029_魔咒詞典.cpp : 定義控制臺應用程序的入口點。//題目1029:魔咒詞典//時間限制:5 秒內存限制:32 兆特殊判題:否提交:5097解決:1478//題目描述:// 哈利波特在魔法學校的必修課之一就是學習魔咒。據說魔法世界有100000種不同的魔咒,哈利很難全部記住,但是為了對抗強敵,他必須在危急時刻能夠調用任何一個需要的魔咒,所以他需要你的幫助。//// 給你一部魔咒詞典。當哈利聽到一個魔咒時,你的程序必須告訴他那個魔咒的功能;當哈利需要某個功能但不知道該用什么魔咒時,你的程序要替他找到相應的魔咒。如果他要的魔咒不在詞典中,就輸出“what?”//輸入:// 首先列出詞典中不超過100000條不同的魔咒詞條,每條格式為://// [魔咒] 對應功能//// 其中“魔咒”和“對應功能”分別為長度不超過20和80的字符串,字符串中保證不包含字符“[”和“]”,且“]”和后面的字符串之間有且僅有一個空格。詞典最后一行以“@END@”結束,這一行不屬于詞典中的詞條。// 詞典之后的一行包含正整數N(<=1000),隨后是N個測試用例。每個測試用例占一行,或者給出“[魔咒]”,或者給出“對應功能”。//輸出:// 每個測試用例的輸出占一行,輸出魔咒對應的功能,或者功能對應的魔咒。如果魔咒不在詞典中,就輸出“what?”#include "stdafx.h"#include "stdio.h"#include "iostream"#include "string"#include "map"using namespace std;int main(){ string input; map<string,string> magic; while(getline(cin,input) && (input!="@END@")){ int i = 0; while(input[i++]!=']'){;} magic[input.substr(0,i)] = input.substr(i+1,input.length()-1); } int n; cin>>n; getchar(); //讀入回車 map<string, string>::iterator iter; while(n--){ getline(cin,input); int flag = 0; if(input[0] == '['){ for(iter = magic.begin();iter!=magic.end();iter++){ if(iter->first == input){ cout<<iter->second<<endl; flag = 1; break; } } if(!flag) cout<<"what?"<<endl; } else{ for(iter = magic.begin();iter!=magic.end();iter++){ if(iter->second == input){ string temp = iter->first; cout<<temp.substr(1,temp.length()-2)<<endl; flag = 1; break; } } if(!flag) cout<<"what?"<<endl; } } return 0;}/*1.如果前面讀入一個int型a,即cin>>a ,后面getline,則應加上getchar讀入回車2.string和string.h是不同的頭文件3.substr();4.這題還可以用string的find函數來簡化代碼(返回位置,沒有返回-1)5.map的find函數用來尋找key*/