计蒜客 蒜厂秘籍

来源:互联网 发布:淘宝怎么建战队 编辑:程序博客网 时间:2024/06/09 17:27

问题

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

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

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

输入格式
字典部分以START开始,以END结束。

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

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

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

输出格式

原稿翻译后的文本。

样例输入

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

样例输出

i love you!


思路

这题可以用映射表来做,这题最坑爹的地方就是数据中存在有的空行,还有就是要考虑最后是以单词结尾的!提示一下单词是最长的连续字母串。比如 abcd!ef中ab不算单词。


实现代码(C++)

#include <iostream>#include <string>#include <map>#include <ctype.h>using namespace std;int main() {    string start1;    cin>>start1;//输入START    string x,y;    map<string, string> m;    while (true) {        cin>>x;        if (x=="END") {            break;        }        cin>>y;        m[y]=x;    }    string start2;    getline(cin,start2);//吸收\n    string sentences="";    while (true) {        string line;        getline(cin,line);        if (line=="START") {            continue;        }        if (line=="END") {            break;        }        string words="";        for (auto i=line.begin();i!=line.end();i++) {            if (isalpha(*i)){//判断是否为字母,如果是放到words里                words+=*i;            }else {                if (words!="") {                    if(m.count(words)){//判断words是否在m的key有                        sentences+=m[words];                    }else {//如果没有,则将新的单词放到sentences里                        sentences+=words;                    }                }                sentences+=*i;//句子加上非字母的                words.clear();//清空words            }           }        if (words!="") {//处理最后以单词结尾的                if(m.count(words)){                    sentences+=m[words];                }else {                    sentences+=words;                }            }            sentences+='\n';    }    cout<<sentences;    }
0 0
原创粉丝点击