[2025 新生训练赛 2] 摩斯电码(Hard ver.)
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
本题为 A. 摩斯电码(Easy ver.) 的困难版本,共享部分题面。
摩斯电码(英语:Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。由美国发明家萨缪尔·摩尔斯及其助手艾尔菲德·维尔在 1836 年发明。
摩斯电码是一种早期的数字化通信形式,在本题中,约定它的代码包括三种:
-
点(
.
) -
划(
-
) -
单词间的分隔符(
/
),将电码转为明文时遇到此字符,将此字符转换成空格;其他情况不要输出空格
本题约定,字符的摩斯电码之间用空格隔开,字符与代码的对应关系如下(码表中的字母仅含大写,所有字符均为半角字符):
给你一个字符串,输出对应的摩斯电码。转换的具体规则如下:
-
小写字母视作大写字母;
-
字母(分隔符)的摩斯电码之间用空格隔开;
-
空格转换为
/
(分隔符)。
输入格式
第一行一个整数 ,表示字符串的长度。
第二行一个长度为 的字符串 ,保证只由英文字母、数字、点号(.
)、逗号(,
)和空格组成,头尾处不可能是空格。
由于输入的字符串 含有空格,建议程序按如下方式读取输入数据(C++):
cin >> n;
getchar(); // 吃掉输入 n 后的换行符
getline(cin, s); // 读取整行
输出格式
一行,字符串 对应的摩斯电码。
样例数据
输入 #1
44
The quick brown FOX jumps over the lazy DOG.
输出 #1
- .... . / --.- ..- .. -.-. -.- / -... .-. --- .-- -. / ..-. --- -..- / .--- ..- -- .--. ... / --- ...- . .-. / - .... . / .-.. .- --.. -.-- / -.. --- --. .-.-.-
说明/提示
建议在学会 C++ 基础语法(或 Python 基础语法)以及字符串知识的情况下完成本题。
部分参考代码(C++):
string letterMorse[26] = {
".-", // A
"-...", // B
"-.-.", // C
"-..", // D
".", // E
"..-.", // F
"--.", // G
"....", // H
"..", // I
".---", // J
"-.-", // K
".-..", // L
"--", // M
"-.", // N
"---", // O
".--.", // P
"--.-", // Q
".-.", // R
"...", // S
"-", // T
"..-", // U
"...-", // V
".--", // W
"-..-", // X
"-.--", // Y
"--.." // Z
};
string numMorse[10] = {
"-----", // 0
".----", // 1
"..---", // 2
"...--", // 3
"....-", // 4
".....", // 5
"-....", // 6
"--...", // 7
"---..", // 8
"----." // 9
};
string dotMorse = ".-.-.-";
string commaMorse = "--..--";