如何将明文消息转换为加密消息?附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
相关产品推荐
相关产品推荐

