问题 I: 在线翻译
时间限制: 1.00s | 内存限制: 128MB
题目描述
你最近从滑铁卢搬到了另一个大城市,这里的人们说着一种难以理解的外语。幸运的是,你带着一本词典,它可以帮助你与这里的人们沟通。
输入
输入包含不多于 10000 条词条,接着空一行,然后是待翻译的短文,包含不多于 100000 个外语单词。每一个词条占一行,包含英语单词和对应的外语单词,两者之间用空格隔开。短文中每个外语单词占 1 行。输人保证没有重复的外语单词,且每个单词都由不多于 10 个的小写字母组成。
输出
输出是翻译成英文的短文,每个英文单词占一行。如果有词典中没有出现的外语单词,则该单词应该被翻译成 eh
。
输入输出样例
样例输入 #1
复制
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
ittenkay
oopslay
样例输出 #1
复制
cat
eh
loops
思路 :
这道题我们要使用stl当中的map函数,可以将任何基本类型映射到任何基本类型。如int array[100]事实上就是定义了一个int型到int型的映射。map提供一对一的数据处理,key-value键值对,其类型可以自己定义,第一个称为关键字,第二个为关键字的值。这道题我们使用的就是字符串到字符串的映射,要注意这道题的输入还是有些麻烦的,getline一次读取一行直到读取到空字符串为止。
map.find()的使用,在容器中寻找值为k的元素,返回该元素的迭代器。否则,返回map.end()。
代码实现:
#include<bits/stdc++.h>
using namespace std;
int main()
{
map<string,string> mp;
string s;
while(getline(cin,s) && s!="")
{
int idx=0;
string x,y;
for(int i=0;i<s.size();i++)
{
if(s[i]==' ') idx=i;
}
for(int i=0;i<idx;i++) x+=s[i];
for(int i=idx+1;i<s.size();i++) y+=s[i];
mp[y]=x;
}
while(cin>>s)
{
if(mp.find(s)!=mp.end()) cout<<mp[s]<<endl;
else printf("eh\n");
}
return 0;
}