使用JavaScript编码morsecode

问题描述 投票:4回答:3

我试图以最简单的方式将任何文本字符串转换为摩尔斯电码。我对编程很新,所以请你给我一些关于我可以用什么方法的建议。

到目前为止,我刚刚编写了一个短语(字符串)和一个包含摩尔斯电码的数组,但我正在努力解决下一步如何使用字符串中的每个字符,然后使用数组检查它并打印出摩尔斯电码的等价物的字符串。

var phrase = "go down like a lead balloon";

var morseCode = [".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-",     ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."]

for(i=0; i<phrase.length; i++){

c = phrase.charAt(i);

WScript.echo(c + " | " + i);
}  
javascript
3个回答
4
投票

首先,你必须剥离你不能编码的所有字符:

phrase = phrase.toLowerCase().replace(/[^a-z]/g, "");

使用replaceregular expression,你最终会得到一串只有字母的字符。我们还将所有字母转换为小写以便简化。

然后,在for循环中:

c = phrase.charCodeAt(i);

这会将字母转换为等效的ASCII码值。相应的摩尔斯电码将成为qazxsw poi。

正如Gerald Schneider建议的那样,您也可以使用数字来改进这种编码,但代码会更复杂一些。


9
投票

您可以使用字典,如下所示:

morseCode[c - 97]

0
投票

如前所述,您可以将数组转换为对象以进行一对一映射。这样您就不必担心错误的字符进入输出,因为解码函数会在它们不作为键存在时将其过滤掉。

var alphabet = {
    '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': '..---', '3': '...--', '4': '....-', 
    '5': '.....', '6': '-....', '7': '--...', '8': '---..', 
    '9': '----.', '0': '-----', 
}

"This is a sentence containing numbers: 1 2 3 4 5"
    .split('')            // Transform the string into an array: ['T', 'h', 'i', 's'...
    .map(function(e){     // Replace each character with a morse "letter"
        return alphabet[e.toLowerCase()] || ''; // Lowercase only, ignore unknown characters.
    })
    .join(' ')            // Convert the array back to a string.
    .replace(/ +/g, ' '); // Replace double spaces that may occur when unknow characters were in the source string.

// "- .... .. ... / .. ... / .- / ... . -. - . -. -.-. . / -.-. --- -. - .- .. -. .. -. --. / -. ..- -- -... . .-. ... / .---- / ..--- / ...-- / ....- / ....."

然后有一个解码功能:

var morseObj = {};
for (var i = 97, l = 97 + morseCode.length; i < l; i++) {
  morseObj[String.fromCharCode(i)] = morseCode[i - 97];
}

function encode(sentence) { var output = ''; for (var i = 0, l = sentence.length; i < l; i++) { var letter = sentence[i].toLowerCase(); if (morseObj[letter]) { output += morseObj[letter] + ' '; } } return output; } encode('My name is Andy'); // "-- -.-- -. .- -- . .. ... .- -. -.. -.-- "

© www.soinside.com 2019 - 2024. All rights reserved.