蒜头君最近在上翻译专题课,教授丢给了他一本字典和一本蒜厂秘籍原稿。
字典包括蒜厂秘籍文字,和对应的英文解释。
蒜头君需要把蒜厂秘籍原稿翻译成英文稿,达成翻译家伟业。
输入格式
字典部分以START
开始,以END
结束。
中间部分每行两个单词,第一个是英文,第二个是蒜厂秘籍文字,以单个空格隔开。
接下来是历史书部分,同样以START
开始,以END
结束。
历史书包含若干行文本,如果其中的单词(由连续的英文字母组成)在字典上出现过,且是蒜厂秘籍文字,则把它替换成英文;否则,保留该单词,也保留所有非英文字母的特殊符号。文本长度不超过 1000010000。
输出格式
原稿翻译后的文本。
样例输入
START love abc you dddd END START i abc dddd! END
样例输出
i love you!
直接模拟,但是始终报格式错误,后来发现输入完START始终会多输出一个空行,用getchar吸收一下就好了。
#include<bits/stdc++.h>
using namespace std;
map<string,string> m;
int main()
{
string a;
while(cin>>a)
{
if(a=="START")
continue;
if(a=="END")
{
getchar(); //吸收多余的回车
break;
}
string b;
cin>>b;
m[b]=a;
}
while(getline(cin,a))
{
if(a=="START")
continue;
if(a=="END")
break;
int pos=0,end=0;
for(int i=0;i<a.length();i++)
{
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
{
pos=i;
while((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')) //判断一个单词
{
i++;
}
end=i-1;
i--; //循环要加1,所以这里要先减去
if(m.count(a.substr(pos,end-pos+1)))
{
cout<<m[a.substr(pos,end-pos+1)];
}
else
{
cout<<a.substr(pos,end-pos+1);
}
}
else
{
cout<<a[i];
}
}
cout<<endl;
}
return 0;
}