同題:UVa 10282 – Babelfish
你剛從滑鐵盧搬到一個大城市。這裡的人們說著一種你難以理解的外語方言。幸運的是,你有一本字典可以幫助你理解他們。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入包含最多 100,000 個字典條目,之後是一個空行,再之後是一則最多包含 100,000 個單詞的訊息。每個字典條目是一行,包含一個英文單詞,後接一個空格,再後接一個外語單詞。字典中沒有外語單詞會重複出現。訊息是一系列的外語單詞,每行一個單詞。輸入中的每個單詞最多包含 10 個小寫字母。 | 輸出是將訊息翻譯成英文,每行一個單詞。不在字典中的外語單詞應翻譯為「eh」。 |
dog ogday cat atcay pig igpay froot ootfray loops oopslay atcay ittenkay oopslay | cat eh loops |
解題思路
使用 getline 來收前面的資料,如果 getline 到的資料為 empty(),代表那是空行,就開始收下面的資料。將 getline 到的字串分成 a 和 b,並且宣告一個 Map<string, string>,並將 Map[b] 設定成 a。
收下面的資料時,如果 Map[收到的字串].empty(),代表沒有紀錄,輸出「eh」,否則就輸出 Map[收到的字串]。
範例程式碼-ZeroJudge N764: Babelfish
#include <iostream>
#include <map>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
string str;
map<string, string>MAP;
while (getline(cin, str) && !str.empty()) {
string a, b;
for (int i = 0; i<str.length(); i++) {
if (str[i] == ' ') {
b = str.substr(i+1, str.length());
break;
}
a += str[i];
}
MAP[b] = a;
}
while (cin >> str) {
if (MAP[str].empty()) cout << "eh\n";
else cout << MAP[str] << "\n";
}
}
//ZeroJudge N764
//Dr. SeanXD