我正在研究一个凯撒密码问题,一直在用卡车运走,但肯定无法尝试将这个数组重新转换回字符。

我试过这样的事情:

document.write(eval('String.fromCharCode('++')'));

document.write(String.fromCharCode.apply(null, solved));

和其他几个运气不好的人。有什么想法吗?我真的很想避免回到绘图板,因为这已经很接近了......

感谢观看!

function rot13(str) { // LBH QVQ VG! 
  var solved = []; 
  var arr = str.split(""); 
  for (var i=0; i<arr.length; i++) { 
       solved.push(arr[i].charCodeAt(0));     
    if (solved[i]>65 && solved[i]<91){ 
       solved[i]-=13; 
    } 
     String.fromCharCode(solved[i]); 
} 
   
return solved.join("");} 
 
rot13("SERR PBQR PNZC");

请您参考如下方法:

您不能无条件地减去 13:您必须检查代码点是否低于 78。 (如果低于78,那么你需要加13而不是减去,否则最后会得到错误的字符)

document.write 是 document.wrong。使用更现代、更不易混淆的东西。此函数尝试写入当前文档。如果文档已经处理过,文档将被替换为包含您的参数的空白文档。你不想要那个;请改用正确的 DOM 方法。 (也不要使用 eval)

你在做什么

String.fromCharCode(solved[i]);

但那是一条不做任何事情的独立行 - 您可能打算将其结果分配给 solved[i]

为了避免让自己感到困惑,在您真正拥有已解决的 Angular 色之前,可能不要推送到 solved 数组。

function rot13(str) { 
  const solved = []; 
  const arr = str.split(""); 
  for (let i = 0; i < arr.length; i++) { 
    const initialCharCode = arr[i].charCodeAt(0); 
    if (initialCharCode > 65 && initialCharCode < 91) { 
      const rotCode = initialCharCode < 78 ? initialCharCode + 13 : initialCharCode - 13; 
      solved.push(String.fromCharCode(rotCode)); 
    } else { 
      solved.push(String.fromCharCode(initialCharCode)); 
    } 
  } 
  return solved.join(""); 
} 
 
console.log(rot13("SERR PBQR PNZC"));


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!