蒜厂秘籍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37286282/article/details/79741896

蒜头君最近在上翻译专题课,教授丢给了他一本字典和一本蒜厂秘籍原稿。

字典包括蒜厂秘籍文字,和对应的英文解释。

蒜头君需要把蒜厂秘籍原稿翻译成英文稿,达成翻译家伟业。

输入格式

字典部分以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;
}

猜你喜欢

转载自blog.csdn.net/m0_37286282/article/details/79741896
今日推荐