Translation 之 map 解决

就这道题用map给出自己的算法。
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


网上关于这道题的解答答案十分多,这是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;
}

来和大家分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值