javascript 我怎样才能摆脱原来的信件

0lvr5msh  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(95)

我正在尝试编写一个函数,它以ROT13编码的字符串作为输入,并返回解码后的字符串。所有字母均为大写。我不应该转换任何非字母字符(即空格,标点符号),但一定要把它们传下去。我成功地返回了一个解码的字符串,但每个字母都位于原始字母之间。你能告诉我哪里出错了吗?谢谢你。

function rot13(str) {
  const splitted = str.split(``)
  const regex = /\W+/
  let result = []
  for(let i=0;i<splitted.length;i++){
    if(!regex.test(splitted[i])){
      if(splitted[i].charCodeAt()>=65&&splitted[i].charCodeAt()<=77){
        result.push(String.fromCharCode(splitted[i].charCodeAt()+13))
       }
      if(splitted[i].charCodeAt()>=78&&splitted[i].charCodeAt()<=90){
        result.push(String.fromCharCode(splitted[i].charCodeAt()-13))} 
        }
   result.push(splitted[i])
   }
  return result.join(``)
 }

//it has to be FREE CODE CAMP
console.log(rot13("SERR PBQR PNZC"))//FSREERER CPOBDQER CPANMZPC
//it has to be FREE PIZZA!
console.log(rot13("SERR CVMMN!")) //FSREERER PCIVZMZMAN!

我试图摆脱原来的字母,在每个if块中使用slice()和replace(),但它不起作用。

ibrsph3r

ibrsph3r1#

尝试使用以下功能

function rot13(str) {
  let decodedStr = "";
  
  for (let i = 0; i < str.length; i++) {
    let charCode = str.charCodeAt(i);
    
    if (charCode >= 65 && charCode <= 90) {
      // Decode uppercase letters
      decodedStr += String.fromCharCode(((charCode - 65 + 13) % 26) + 65);
    } else if (charCode >= 97 && charCode <= 122) {
      // Decode lowercase letters
      decodedStr += String.fromCharCode(((charCode - 97 + 13) % 26) + 97);
    } else {
      // Keep non-alphabetic characters as they are
      decodedStr += str.charAt(i);
    }
  }

  return decodedStr;
}

console.log(rot13("SERR PBQR PNZC"));  // Output: "FREE CODE CAMP"
console.log(rot13("SERR CVMMN!"));    // Output: "FREE PIZZA!"

相关问题