我试图以最简单的方式将任何文本字符串转换为摩尔斯电码。我对编程很新,所以请你给我一些关于我可以用什么方法的建议。
到目前为止,我刚刚编写了一个短语(字符串)和一个包含摩尔斯电码的数组,但我正在努力解决下一步如何使用字符串中的每个字符,然后使用数组检查它并打印出摩尔斯电码的等价物的字符串。
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);
}
首先,你必须剥离你不能编码的所有字符:
phrase = phrase.toLowerCase().replace(/[^a-z]/g, "");
使用replace
和regular expression,你最终会得到一串只有字母的字符。我们还将所有字母转换为小写以便简化。
然后,在for循环中:
c = phrase.charCodeAt(i);
这会将字母转换为等效的ASCII码值。相应的摩尔斯电码将成为qazxsw poi。
正如Gerald Schneider建议的那样,您也可以使用数字来改进这种编码,但代码会更复杂一些。
您可以使用字典,如下所示:
morseCode[c - 97]
如前所述,您可以将数组转换为对象以进行一对一映射。这样您就不必担心错误的字符进入输出,因为解码函数会在它们不作为键存在时将其过滤掉。
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'); // "-- -.-- -. .- -- . .. ... .- -. -.. -.-- "