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

如何将明文消息转换为加密消息?附C++代码示例

如何将普通明文消息转换为加密消息?

嘿,看起来你想用ROT13加密算法来实现明文到加密消息的转换——这可是入门加密领域的经典选择,毕竟ROT13本质就是把字母往后挪13位,而且加密解密是同一个操作(26个英文字母,13*2刚好绕一圈)。不过你贴的C++代码里有几个语法问题,我来帮你修正,顺便把逻辑补全。

原代码里的坑

  • 没必要用string()去包裹单个字符,比如string(message[i]==32)这种写法是错的,单个字符是char类型,直接用字符本身或者它的ASCII值判断就行。
  • 代码没写完,最后cout<<char(x);后面的循环和main函数都没闭合。
  • 只处理了小写字母里从'n'开始的部分,既没覆盖全小写字母,也没考虑大写字母的情况。

修正后的完整可运行代码

#include <iostream>
#include <string>
using namespace std;

int main() {
    string message;
    cout << "Ahlan ya user ya habibi." << endl;
    cout << "What do you like to do today?" << endl;
    cout << "Please enter the message:" << endl;
    getline(cin, message);

    // 遍历每个字符执行ROT13加密
    for (int i = 0; i < message.size(); i++) {
        char currentChar = message[i];
        
        // 空格直接输出,不加密
        if (currentChar == ' ') {
            cout << currentChar;
        }
        // 处理小写字母a-z
        else if (currentChar >= 'a' && currentChar <= 'z') {
            // 先转成0-25的范围,加13后取模26,再转回字母
            currentChar = (currentChar - 'a' + 13) % 26 + 'a';
            cout << currentChar;
        }
        // 处理大写字母A-Z
        else if (currentChar >= 'A' && currentChar <= 'Z') {
            currentChar = (currentChar - 'A' + 13) % 26 + 'A';
            cout << currentChar;
        }
        // 非字母字符(数字、符号等)直接输出
        else {
            cout << currentChar;
        }
    }
    cout << endl;
    return 0;
}

代码逻辑说明

  • ROT13核心:不管是大写还是小写字母,先把它们映射到0-25的区间(比如'a'对应0,'z'对应25),加上13之后对26取模(防止超出字母范围),再映射回对应的字母。
  • 兼容性:保留了空格和非字母字符的原样输出,这样加密后的消息不会丢失原有的格式信息。
  • 语法修复:去掉了错误的string()转换,补全了代码结构,现在可以直接编译运行啦。

测试一下

比如你输入Hello Stack Overflow!,加密后会得到Uryyb Fgbsb Bireybjbe!,再把这个加密后的消息输入程序,又会还原成原内容~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:53:06