测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A34438. 小杨的字典问题描述在遥远的星球,有两个国家A国和B国,他们使用着不同的语言:A语言和B语言。小杨是B国的翻译官,他的工作是将A语言的文章翻译成B语言的文章。为了顺利完成工作,小杨制作了一本字典,里面记录了个A语言单词对应的B语言单词,巧合的是,这些单词都由地球上的26个小写英文字母组成。小杨希望你写一个程序,帮助他根据这本字典翻译一段 A 语言文章。这段文章由标点符号 !()-[]{}\|;:'…

填空题 较难

题目描述

小杨的字典

问题描述

在遥远的星球,有两个国家A国和B国,他们使用着不同的语言:A语言和B语言。小杨是B国的翻译官,他的工作是将A语言的文章翻译成B语言的文章。

为了顺利完成工作,小杨制作了一本字典,里面记录了个A语言单词对应的B语言单词,巧合的是,这些单词都由地球上的26个小写英文字母组成。

小杨希望你写一个程序,帮助他根据这本字典翻译一段 A 语言文章。这段文章由标点符号 !()-[]{}\|;:'",./?<> 和一些 A 语言单词构成,每个单词之间必定由至少一个标点符号分割,你的程序需要把这段话中的所有A语言单词替换成它的B语言翻译。特别地,如果遇到不在字典中的单词,请使用大写UNK来替换它。

例如,小杨的字典中包含 2 个 A 语言单词 abc 和 d ,它们的 B 语言翻译分别为 a 和 def ,那么我们可以把 A语言文章 abc.d.d.abc.abcd. 翻译成 B 语言文章 a.def.def.a.UNK. ,其中,单词 abcd 不在词典内,因此我们需要使用 UNK 来替换它。

输入描述

第一行一个整数 N,表示词典中的条目数。保证 N≤100。

接下来 N 行,每行两个用单个空格隔开的字符串A ,B ,分别表示字典中的一个 A 语言单词以及它对应的 B 语言翻译。保证所有 A 不重复;保证 和 的长度不超过 10。

最后一行一个字符串 S,表示需要翻译的 A 语言文章。保证字符串 s 的长度不超过 1000,保证字符串 S 只包含小写字母以及标点符号 !()-[]{}\|;:'",./?<> 。

输出描述

输出一行,表示翻译后的结果。

特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

样例输入1

2

abc a

d def

abc.d.d.abc.abcd.

样例输出1

a.def.def.a.UNK.

样例输入2

3

abc a

d def

abcd xxxx

abc,(d)d!-abc?abcd

样例输出2

a,(def)def!-a?xxxx

样例输入3

1

abcdefghij klmnopqrst

!()-[]{}\|;:'",./?<>abcdefghijklmnopqrstuvwxyz

样例输出3

!()-[]{}\|;:'",./?<>UNK

参考答案

#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <string> #include <map> #include <iostream> using namespace std; map<string, string> dict; int main() { int N; cin >> N; while(N --) { string word1, word2; cin >> word1 >> word2; dict[word1] = word2; } string content, word = ""; cin >> content, content += "\n"; int m = content.length(); for(int i = 0; i < m; i ++) { if (content[i] >= 'a' && content[i] <= 'z') word += content[i]; else { if (word != "") { if (dict.count(word)) cout << dict[word]; else cout << "UNK"; word = ""; } cout << content[i]; } } return 0; }
上一题 下一题