首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >凯撒密码,这是一个freeCodeCamp编码挑战

凯撒密码,这是一个freeCodeCamp编码挑战
EN

Stack Overflow用户
提问于 2021-01-03 04:13:00
回答 2查看 161关注 0票数 1

这是一个编码器和解码器函数,它接受一个编码值并返回解码值,它被称为ROT13密码,其中字母的值被移位13位。例如,'A‘↔'N','B’↔'O‘等等。我不知道为什么我的代码不能工作,有人能解释一下吗?下面是我的代码:

代码语言:javascript
复制
function rot13(str) {
 for (let i = 0; i < str.length; i++){
   let charCode = str.charCodeAt(i);
   if (charCode >= 65 && charCode <= 90){
     let vary = charCode + 13;
     if (vary > 90){
       let newVary = vary - 90 - 1 + 65;
       str.replace(String.fromCharCode(charCode), String.fromCharCode(newVary));
     } else {
       str.replace(String.fromCharCode(charCode), String.fromCharCode(vary));
     };
   };
 };
 return str;
}; console.log(rot13("SERR PBQR PNZC"));
EN

回答 2

Stack Overflow用户

发布于 2021-01-03 04:25:03

str.replace不会直接替换变量。它返回新的字符串。取而代之的是:

代码语言:javascript
复制
str = str.replace(...)
票数 0
EN

Stack Overflow用户

发布于 2021-01-03 04:32:47

有几个问题

  • replace不会更改现有字符串,它会返回修改后的字符串
  • replace也只会更改第一次出现的内容,除非您使用的正则表达式设置了全局标志
  • 您的算法将在循环

中的后续迭代中修改已经“解码”的字符

代码语言:javascript
复制
function rot13(str) {
  let decoded = '';
  for (let i = 0; i < str.length; i++) {
    let charCode = str.charCodeAt(i);
    if (charCode >= 65 && charCode <= 90) {
      let vary = charCode + 13;
      if (vary > 90) {
        let newVary = vary - 90 - 1 + 65;
        decoded += String.fromCharCode(newVary)
      } else {
        decoded += String.fromCharCode(vary)
      };
    } else {
      decoded += String.fromCharCode(charCode)
    }
  };
  return decoded;
};
console.log(rot13("SERR PBQR PNZC"));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65543615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档