JavaScript中的Caesars Cipher - 为什么'A'变成'''在这里?

问题描述 投票:0回答:1

我目前正在通过一个FreeCodeCamp挑战,要求你创建一个ROT13密码(一个非常简单的密码,它将每个字母移动到前面的13个字母,以一个永无止境的字母表)。我的代码如下:

function rot13(str) {
  let lettersRegex = /[A-Z]/;
  let alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');
  let charCodes = [];
  for(let i = 0; i < str.length; i++) {
    if(str.charAt(i).match(lettersRegex)) {
      charCodes.push(str.charCodeAt(i));
    } else {
      charCodes.push(str.charAt(i));
    }
  }
  let ret = '';
  console.log(`charCodes is currently ${charCodes}`);
  for(let i = 0; i < charCodes.length; i ++) {
    let temp = 0;
    if(lettersRegex.test(String.fromCharCode(charCodes[i]))) {
      if((alphabet.indexOf(String.fromCharCode(charCodes[i])) + 13) > alphabet.length) {
        temp = charCodes[i] + alphabet.indexOf(charCodes[i]) - 12;
      }
      else {
        temp = charCodes[i] + 13;
      }
      ret += String.fromCharCode(temp);
    } else {
      ret += charCodes[i];
    }
  }
  console.log(ret);
  return ret;
}
rot13("GUR DHVPX OEBJA SBK WHZCF BIRE GUR YNML QBT.");
//THE QUICK BROWN FOX JUMPS OVER THE L[ZY DOG.

基本上,每个字母,但“A”在密码后转移到正确的答案。什么可能导致'A'在此代码中变成'['而不是'N'?

任何关于我的代码的评论或提示也将非常感激。

javascript encryption caesar-cipher rot13
1个回答
2
投票

这是一个简单的修复,将>更改为>=不要忘记数组是零索引的。 if((alphabet.indexOf(String.fromCharCode(charCodes[i])) + 13) >= alphabet.length)

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