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

JavaScript实现凯撒密码遇空格/特殊字符异常的问题求助

凯撒密码加解密问题修复方案

现有代码的核心问题

  1. 循环内重复重置newString = [],导致每次迭代都清空之前的结果,最终只剩最后一次操作的无效内容
  2. 判断条件错误:alphabet.includes(plainMessage)是检查整个输入字符串是否在字母数组中,永远返回false,应该检查当前遍历的单个字符plainMessage[i]
  3. 数组操作逻辑混乱:newString += [i]这种写法会把数组强制转成字符串拼接,完全不符合收集加密字符的需求
  4. encryptLetter函数未处理非字母字符:当输入空格、数字或特殊字符时,alphabet.indexOf()返回-1,计算出的newIndex会导致错误的字母映射(比如空格会被错误映射到c)

改进后的实现(基于你熟悉的数组方法,无需charCode)

我们保留你用字母数组的思路,只修正核心逻辑,同时完美处理非字母字符:

const shift = 3;
const alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
const plainMessage = 'Where will the party take place in 2024?';

// 加密单个字符的函数,新增非字母处理逻辑
function encryptChar(char, shift) {
  // 标记原字符是否为小写
  const isLowerCase = alphabet.includes(char);
  // 统一转小写找索引
  const lowerChar = char.toLowerCase();
  const index = alphabet.indexOf(lowerChar);
  
  // 如果不是字母(index为-1),直接返回原字符
  if (index === -1) {
    return char;
  }
  
  // 计算新索引,取模避免超出数组长度(比如z+3会回到c)
  const alphabetLength = alphabet.length;
  const newIndex = (index + shift) % alphabetLength;
  const newLowerChar = alphabet[newIndex];
  
  // 恢复原字符的大小写
  return isLowerCase ? newLowerChar : newLowerChar.toUpperCase();
}

// 加密整个字符串的函数
function encryptMessage(message, shift) {
  const encryptedChars = [];
  // 逐个遍历字符串中的字符
  for (let i = 0; i < message.length; i++) {
    const currentChar = message[i];
    // 调用加密函数,把结果存入数组
    encryptedChars.push(encryptChar(currentChar, shift));
  }
  // 把数组拼接成最终的加密字符串
  return encryptedChars.join('');
}

// 执行加密并输出结果
const encryptedMessage = encryptMessage(plainMessage, shift);
console.log('加密后的消息:', encryptedMessage);

关键改进点说明

  • 保留非字母字符:遇到空格、数字、特殊字符时直接返回原内容,不会错误映射为字母
  • 正确遍历单个字符:循环中每次处理message[i],而非操作整个字符串
  • 数组正确收集结果:用push()添加加密后的字符,最后用join('')转成字符串,避免拼接错误
  • 处理大小写:记录原字符的大小写状态,加密后恢复,保证大写字母加密后仍为大写

测试结果

输入'Where will the party take place in 2024?'会输出:
'Zkhuh zloo wkh sduwb wdnh sodfh lq 2024?'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:22:43