題目: UVa - 10282 - Babelfish
題目說明
給動物名稱及對應的叫聲,依據叫聲輸出對應的動物名稱。
Input: 測資分為兩部分,前面的部分每一行會有兩個字串,分別代表動物名稱及叫聲,中間以空格隔開。後面的部分為動物的叫聲,兩部分中間以空行隔開。
Output: 根據測資前面的部分輸出叫聲對應的動物,若是沒有在前面出現過則輸出 “eh”。
解題思路
使用 Unordered_map 建立叫聲及動物名稱的映射即可。使用 getline()
以行為單位讀取資料,讀取後先判斷,若為空代表前半部分讀取完畢,否則使用 String 中的 find()
找到空格的 index,將字串分為兩部分,以叫聲為 key,名稱為 val,建立映射即可,當前半部分讀取完後開始讀取叫聲,先判斷這種叫聲是否出現過,若出現過直接輸出名稱即可,否則輸出 “eh”。
參考解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include <iostream> #include <string> #include <unordered_map>
using namespace std;
static auto __ = []() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); return 0; }();
int main() { string key, val; unordered_map<string, string> m; while (getline(cin, val)) { if (val.empty()) break; int idx = val.find(' '); key = val.substr(idx + 1, val.length() - idx); val.erase(idx); m[key] = val; } while (getline(cin, key)) { if (key.empty()) break; m.count(key) ? cout << m[key] << '\n' : cout << "eh\n"; } }
|