当前位置: 面试刷题>> 独特的莫尔斯码 (经典算法题500道)


题目描述补充

题目:独特的莫尔斯码

莫尔斯码是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。在无线电通讯中广泛使用。现要求编写一个程序,该程序接收一个由英文字母(大写或小写)、数字和空格组成的字符串作为输入,将其转换成对应的莫尔斯码表示,并输出转换后的莫尔斯码字符串。注意,输入字符串中的空格在输出中应保留其分隔作用,但不需要转换为莫尔斯码。

莫尔斯码对照表(部分示例):

  • A: .-
  • B: -...
  • C: -.-.
  • D: -..
  • E: .
  • 1: .----
  • 2: ..---
  • ... (空格无需转换,直接保留)

要求

  1. 输入字符串可能包含多个单词,单词之间由空格分隔。
  2. 输出的莫尔斯码字符串中,单词之间仍用空格分隔。
  3. 字母需转换为对应的大写莫尔斯码表示,因为莫尔斯码不区分大小写。

示例代码

PHP 示例

<?php

function morseCodeTranslator($input) {
    $morseCodeTable = [
        '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' => '--..', '1' => '.----', '2' => '..---',
        // 可以继续添加其他数字和符号的莫尔斯码
    ];

    $words = explode(' ', strtoupper($input)); // 转换为大写并分割单词
    $output = '';

    foreach ($words as $word) {
        $morseWord = '';
        for ($i = 0; $i < strlen($word); $i++) {
            $char = $word[$i];
            if (isset($morseCodeTable[$char])) {
                $morseWord .= $morseCodeTable[$char] . ' '; // 添加空格分隔字符的莫尔斯码
            }
        }
        $output .= rtrim($morseWord) . ' '; // 移除尾部空格并添加单词间空格
    }

    return rtrim($output); // 移除最后的空格
}

// 示例使用
echo morseCodeTranslator("HELLO WORLD 123"); // 输出: .... . .-.. .-.. ---   --- .--. ---.   .---- ..--- ...--

?>

Python 示例

def morse_code_translator(input_str):
    morse_code_table = {
        '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': '--..', '1': '.----', '2': '..---',
        # 可以继续添加
    }

    words = input_str.upper().split()
    output = ''

    for word in words:
        morse_word = ' '.join(morse_code_table.get(char, '') for char in word)
        output += morse_word + ' '

    return output.strip()

# 示例使用
print(morse_code_translator("HELLO WORLD 123"))  # 输出: .... . .-.. .-.. ---   --- .--. ---.   .---- ..--- ...--

JavaScript 示例

function morseCodeTranslator(input) {
    const morseCodeTable = {
        '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': '--..', '1': '.----', '2': '..---',
        // 可以继续添加
    };

    const words = input.toUpperCase().split(' ');
    let output = '';

    words.forEach(word => {
        let morseWord = '';
        for (let char of word) {
            if (morseCodeTable[char]) {
                morseWord += morseCodeTable[char] + ' ';
            }
        }
        output += morseWord.trim() + ' ';
    });

    return output.trim();
}

// 示例使用
console.log(morseCodeTranslator("HELLO WORLD 123")); // 输出: .... . .-.. .-.. ---   --- .--. ---.   .---- ..--- ...--

在以上代码中,我们首先定义了一个包含莫尔斯码对照表的字典/数组,然后遍历输入字符串的每个字符,将其转换为对应的莫尔斯码,并保留了原字符串中的空格分隔。

推荐面试题