You have just moved from Waterloo to a big city.
The people here speak an incomprehensible dialect of a foreign language.
Fortunately, you have a dictionary to help you understand them.
Input consists of up to 100,000 dictionary entries, followed by a blank line, followed by a message of up to 100,000 words.
Each dictionary entry is a line containing an English word, followed by a space and a foreign language word.
No foreign word appears more than once in the dictionary.
The message is a sequence of words in the foreign language, one word on each line.
Each word in the input is a sequence of at most 10 lowercase letters.
Output is the message translated to English, one word per line.
Foreign words not in the dictionary should be translated as "eh".
dog ogday cat atcay pig igpay froot ootfray loops oopslay atcay ittenkay oopslay
cat eh loops
网上关于这道题的解答答案十分多,这是POJ2503题(我是在 www.soj.me 上做的),网上一搜一大把,但是都十分繁琐如下是我的代码:
#include <iostream>
#include <string>
#include <map>
using namespace std;
const int maxNum = 100001;
int main() {
map<string, string> dic;
string english, foreign;
char tmp;
while (1) {
tmp = cin.get();
if (tmp == '\n')
break;
english.push_back(tmp);
while ((tmp = cin.get()) != ' ') {
english.push_back(tmp);
}
cin >> foreign;
tmp = cin.get();
dic[foreign] = english; //不知道为什么把这儿改成 dic.insert(make_pair(foreign, english));会wrong answer,我估计是因为字典会更新的原因,如果用insert字典无法更新。
english.clear();
}
while (cin >> foreign) {
if (dic.count(foreign) == 0)
cout << "eh" << endl;
else
cout << dic[foreign] << endl;
}
return 0;
}
后来无意中看到这样一段代码,原来这道题还可以这样简洁
#include <iostream>
#include <cstdio>
#include <map>
using namespace std;
int main()
{
string str1, str2, str;
map<string, string> m;
map<string, string>::iterator it;
while(1)
{
cin>>str1;
if(getchar()!=' ')
break;
cin>>str2;
m[str2] = str1;
}
do {
it = m.find(str1);
if(it==m.end())
cout<<"eh"<<endl;
else
cout<<m[str1]<<endl;
} while (cin>>str1);
return 0;
}
来和大家分享。