Description:
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
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:
Output is the message translated to English, one word per line. Foreign words not in the dictionary should be translated as "eh".
Sample Input:
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
ittenkay
oopslay
Sample Output:
cat
eh
loops
这个题的大意是让你建立一个字典,然后不知道从哪行开始给你单个词,让你把奇怪的词转换成明文。
由于有map容器,建立映射的部分会极其简单,所以这个题的难点是字符串的操作。需要注意的是在明文与暗文间会有一行空白的行,所以我们的任务就剩下拆分字串了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
using namespace std;
int main()
{
int i;
char str[];
string str1,str2,s;
map<string,string> m;
while(gets(str) && strlen(str))
{
str1=str2="\0";
for(i=;;i++)
if(str[i]==' ')
{
str[i]='\0';
break;
}
str1+=str;
str2+=str+i+; // ???
m[str2]=str1;
//cout << "str1:" << str1 << "\nstr2:" << str2 <<endl;
}
// 这种拆分的方法比较新奇 效率很高可以学习一下
// 需要注意的是 str要用c风格的字串,原理没太搞懂。。。。。。
while(cin>>s)
{
if(m[s].size())
cout<<m[s]<<endl;
else
cout<<"eh\n";
}
return ;
}