单词翻译

题目描述
众所周知,Mr.Zeng 不会说英语,他会使用 A 语言。因为我们的国家已经加入世贸组织,他感受到了压力,已经在开始学习英语。现在需要你用计算机来帮助他做一些翻译工作。


输入格式
输入 N(1≤N≤100005)个词典条目,每个字典条目占一行,分别包含一个英语单词、一个空格和一个该英语单词对应的A语言单词。词典中每个 A 语言单词出现一次。
接着一个空行。
然后是多达M(1≤M≤100005)个需要翻译的A语言单词,每行一个单词。
输入的每个单词最多 10 个小写字母。 


输出格式
对于每个 A 语言单词,请你在输入的词典中找出它对应的英语单词,每行一个单词。
如果 A 语言单词在词典中没出现,就输出“eh”。


样例数据 1
输入


dog ogday 
cat atcay 
pig igpay 
froot ootfray 
loops oopslay 


atcay 
ittenkay 
oopslay
输出


cat 
eh 

loops



记录一下这道题的易错点


这个输入sscanf那句,很巧妙,很简单的就把char数组s转化成两个char数组——p和q

另外 这道题似乎也可以用map来实现

#include<bits/stdc++.h>
using namespace std;
char s[15];
int n=0;
char p[15],q[15];
struct data
{
	string english;
	string a;
}List[100005];
bool cmp(data a,data b)
{
	return a.a<b.a;
}
int main()
{
	while(gets(s))
	{
		if(!strlen(s))	break;
		sscanf(s,"%s%s",p,q);
		List[++n].english=p;
		List[n].a=q;
	}
	sort(List+1,List+n+1,cmp);
	int flag=0;
	while(gets(s))
	{
		int l=0,r=n,mid;
		flag=0;
		while(l<=r)
		{
			mid=(l+r)/2;
			if(List[mid].a==s)
			{
				flag=1;
				break;
			}
			if(List[mid].a>s)	r=mid-1;
			if(List[mid].a<s)	l=mid+1;
		}
		if(flag==0)
		{
			cout<<"eh"<<endl;
		}
		else
		{
			cout<<List[mid].english<<endl;	
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值