You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROT13解码函数问题求助:解码字符与原字符重复如何解决?

问题分析与解决

错误核心

你的代码现在的问题很明确:处理每个字符时,不管是不是字母,最后都会额外把原字符再push到结果数组里。比如处理字母"S"时,先push了解码后的"F",紧接着又push了原字符"S",导致结果里解码字符和原字符重复出现;非字母字符虽然不会被解码,但只被push一次,所以空格、标点是正常的,但字母部分就会出现重复叠加。

修正方案

  1. 把result.push(splitted[i])移到else分支里,仅当字符是非字母时,才把原字符加入结果;字母只保留解码后的字符,不再重复添加原字符。
  2. 将两个独立的if改为if-else,因为大写字母只会落在65-77或78-90其中一个区间,避免重复判断。
  3. 正则表达式简化为/\W/即可,你是判断单个字符,不需要+(+用于匹配连续多个非单词字符)。

修正后的代码

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

// 测试验证
console.log(rot13("SERR PBQR PNZC")) // 输出 FREE CODE CAMP
console.log(rot13("SERR CVMMN!")) // 输出 FREE PIZZA!

内容的提问来源于stack exchange,提问作者akari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:32:44