空白字符读取和处理

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

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

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

输入格式

字典部分以START开始,以END结束。

中间部分每行两个单词,第一个是英文,第二个是蒜厂秘籍文字,以单个空格隔开。

接下来是历史书部分,同样以START开始,以END结束。

历史书包含若干行文本,如果其中的单词(由连续的英文字母组成)在字典上出现过,且是蒜厂秘籍文字,则把它替换成英文;否则,保留该单词,也保留所有非英文字母的特殊符号。文本长度不超过 1000010000。

输出格式

原稿翻译后的文本。

样例输入

START
love abc
you dddd
END
START
i abc dddd!
END

样例输出

i love you!


这道题复杂的地方在于:读取空白字符:空格、制表符等等,而且输出。
#include<bits/stdc++.h>
using namespace std;
int main()
{
    map<string,string> a;
    string s;
    cin>>s;
    while(s!="END")
    {
        cin>>s;
        string val;
        cin>>val;
        a[val]=s;
    }
    getchar();
    char b[10005];
    while(gets(b))
    {
        if(strcmp(b,"END")==0) break;
        string tmp;
        for(int i=0;i<strlen(b);i++)
        {
            if(('a'<=b[i]&&'z'>=b[i])||('A'<=b[i]&&b[i]<='Z'))
            {
                tmp+=b[i];
            }
            else
            {
                if(a.count(tmp)) cout<<a[tmp];
                else cout<<tmp;
                cout<<b[i];
                tmp="";
            }
        }
        if(tmp!="")
        {
            if(a.count(tmp)) cout<<a[tmp];
            else cout<<tmp;
        }
        cout<<endl;
    }

    return 0;
}
 
原文地址:https://www.cnblogs.com/superxuezhazha/p/6393934.html