凯撒密码不懂得怎么解决



我需要代码方面的帮助。我正在尝试解决凯撒密码问题,从我所做的阅读中,我觉得我在某种程度上走在正确的轨道上。我是编码新手,所以我还有很多东西要学,以防这看起来写得不好。我试图做的是将字符串拆分为一个数组,并检查该数组的每个元素是否都是一个字母。如果是,那么该字母将使用 charCodeAt() 和 fromCharcode() 函数转换为一个新字母。我设法只用一个字母单独执行此操作,但是当它进入循环时会搞砸它。如果有人能给我一个提示,说明我做错了什么,或者即使我正朝着正确的方向前进,我将不胜感激。谢谢!

function rot13(str) {  
var splitArr = str.split('');  
var newArr = [ ];  
    for (var i = 0; i < str.length; i++){  
      if (isLetter(splitArr[i]) === true){  
        newArr = String.fromCharCode(splitArr.charCodeAt(splitArr.length[i]) + 13);  
    } else {  
        newArr.push(splitArr[i]);  
       }  
    }  
        return  newArr.join("");  
}
function isLetter(str) {  
return str.length === 1 && str.match(/[A-z]/i); //checks if its a letter  
}

// Change the inputs below to test  
rot13("AB? ...");

你有正确的想法,但你对细节很模糊。

首先,charCodeAt处理字符串,而不是数组,因此您不必先将字符串拆分为数组。如方法名称所示,您要求在字符串中的给定位置输入字符代码。

其次,splitArr.length[i]没有意义 - 在数组上调用.length会返回一个数字,然后你不能转身下标;例如 ['a','b','c'].length[i]变成了3[i].

第三,在进行腐烂 13 时,您必须确保将结果保持在字母表中。 A的字符代码是 65,添加 13 会得到 78,这是N,如愿以偿 - 很棒。但是N也应该变回A,将 13 加到 78 得到 91,这是一个左括号 ([)。

通常的方法是减去"A"的字符代码(如果它是小写的,则减去"a"),

加上 13,取结果模 26(即除以 26 后的余数),然后将其加回"A"的字符代码。

这是一个函数(小提琴),它将腐烂13单个字符字符串。您应该能够修改它以执行任何长度的字符串:

var Acode = "A".charCodeAt(0);
var Zcode = "Z".charCodeAt(0);
var aCode = "a".charCodeAt(0);
var zCode = "z".charCodeAt(0);
function rot13singleChar(ch) {
  var code = ch.charCodeAt(0);
  if (code >= Acode && code <= Zcode) {
    code = (code - Acode + 13) % 26 + Acode;
  } else if (code >= aCode && code <= zCode) {
    code = (code - aCode + 13) % 26 + aCode;
  }
  return String.fromCharCode(code);
}

相关内容

最新更新