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

C++调用STL replace()实现凯撒密码时字符替换不符合预期问题

C++凯撒密码加密程序问题修复

核心错误原因

  • 你顺序调用replace()的逻辑会导致前序替换生成的新字符被后续替换逻辑二次处理:比如第一步把所有a替换为b,下一步执行b换c时,原本的b和刚从a转换来的b会被统一替换为c,经过26次全量替换后,所有字母最终都会被转为a/A,就是你观察到的所有字符变成同一个字母的问题。
  • 硬编码switch分支仅支持固定偏移量,代码冗余极高,无法适配用户输入的任意偏移值。

修复实现

直接遍历字符串的每个字符做偏移计算,避免全量替换的二次处理问题,同时天然支持任意自定义偏移量:

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main()
{
    int Offset;
    string Message;

    cout << "请输入加密偏移量:" << endl;
    cin >> Offset;
    // 归一化偏移量到0~25区间,支持负数偏移和超过26的偏移值
    Offset %= 26;
    if (Offset < 0) Offset += 26;

    cout << "请输入需要加密的文本:" << endl;
    cin >> Message;

    for (char& ch : Message) {
        if (islower(ch)) {
            ch = 'a' + (ch - 'a' + Offset) % 26;
        } else if (isupper(ch)) {
            ch = 'A' + (ch - 'A' + Offset) % 26;
        }
        // 非字母字符默认保持不变,可按需调整逻辑
    }

    cout << "加密结果:" << Message << endl;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 07:09:02