我正在研究一个凯撒密码问题,一直在用卡车运走,但肯定无法尝试将这个数组重新转换回字符。
我试过这样的事情:
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"));