Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript对莫尔斯电码进行编码_Javascript - Fatal编程技术网

使用JavaScript对莫尔斯电码进行编码

使用JavaScript对莫尔斯电码进行编码,javascript,Javascript,我试图用最简单的方法将任何文本字符串转换成莫尔斯电码。我对编程非常陌生,所以请你给我一些建议,我可以使用什么方法 到目前为止,我刚刚编写了一个短语(字符串)和一个包含摩尔斯电码的数组,但我正在努力研究下一步该如何使用字符串的每个字符,然后用数组检查并打印出与字符串等效的摩尔斯电码 var phrase = "go down like a lead balloon"; var morseCode = [".-", "-...", "-.-.", "-..", ".", "..-.", "--."

我试图用最简单的方法将任何文本字符串转换成莫尔斯电码。我对编程非常陌生,所以请你给我一些建议,我可以使用什么方法

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

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);
}  
var phrase=“像铅气球一样下降”;
变量morseCode=[“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-”、“-“-”、“-”、“-”、“…”

对于(i=0;i首先,您必须去除所有无法编码的字符:

phrase = phrase.toLowerCase().replace(/[^a-z]/g, "");
使用和,您将得到一个仅包含字母字符的字符串。我们还将所有字母转换为小写,以表示符号

然后,在for循环中:

c = phrase.charCodeAt(i);
这将把字母转换成其等效的ASCII码值,相应的摩尔斯电码将是
morseCode[c-97]


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

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

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];
}
var morseObj={};
对于(变量i=97,l=97+morseCode.length;i
然后具有解码功能:

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'); // "-- -.-- -. .- -- . .. ... .- -. -.. -.-- "
函数编码(句子){
var输出=“”;
for(变量i=0,l=句子长度;i

这将是编码,而不是解码。
短语。charCodeAt(n)
将为您提供n+1个字符的数字(unicode)代码,65代表A,66代表B等等,使用该(-65)作为莫尔斯地图的键;或者使用查找
莫尔斯={A:“,”B:“-…”
通过
莫尔斯[“A”读取
天哪,你在使用windows脚本主机吗?弃船!说真的。在Firefox上使用类似或Scratchpad的东西(来自开发者工具)。windows脚本主机的行为与浏览器的javascript引擎不同。它对您的代码执行奇怪和不寻常的操作。摩尔斯电码确实有数字和一些特殊字符。@GeraldSchneider是的,的确如此,但它们不在
摩尔斯电码中。我想它们都是字母。只是为了完整性的补充:您还可以使用一个对象,将所有小写字母数字字符作为键,将它们的摩尔斯电码等价物作为值。这意味着将字符串转换为所有小写字符,并跳过对象/字典中没有的字符。@ivy_lynx是的,的确如此。但我认为最好是有一个完整的转换表。非常感谢大家,这对我很有帮助很多人,已经在这上面停留了一段时间。“scenetence”是一个有味道的短语?XDOh伙计,干得好,这比我刚才写的要优雅得多:P我完全忘记了
.map()
-很好,+1。你可能想用
编码
取代
解码
(真的只是吹毛求疵)哦,你必须在莫尔斯字符之间加空格。还有一些单词之间的分隔符。我的意思是:“
”——。————————————”
T
N
Y
开始?我可以理解字符之间的空格,但不太理解单词之间的空格。我对代码进行了编辑,使其小写,因为正如你正确指出的那样,输出没有意义。在书写莫尔斯电码时,像管道或斜线这样的东西经常用来分隔单词。这使它成为一个我更愿意读给那些了解莫尔斯电码的人听。(而且更容易解码,因为否则,你会得到
“mynameisandy”
)Cerburs欢呼。我确实快速浏览了莫尔斯电码维基,但找不到关于单词分离的信息。