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

如何简化C++凯撒加密代码的For循环?实现无数组替代方案

无数组实现凯撒加密的C++代码改写

原代码依赖数组存储整段消息,并用字符串终止符'\0'判断循环结束,如果你还没接触这类用法,可以改成逐个读取字符、实时加密输出的方式,完全不需要数组。

核心思路

不再一次性读取整段消息存入数组,而是逐个读取每个字符:

  1. 读取加密密钥后,跳过输入缓冲区残留的换行符(避免第一个读取的字符是换行)
  2. 用循环逐个读取字符,直到遇到换行(表示输入结束)
  3. 对每个字符执行原代码的加密逻辑,处理后直接输出,无需存储

改写后的完整代码

#include <iostream>

using namespace std;

int main()
{
    char ch;
    int key;
    cout << "Enter a message to encrypt: ";
    cout << "Enter key: ";
    cin >> key;
    // 跳过cin>>key后留在缓冲区的换行符,避免影响后续字符读取
    cin.ignore();
    
    cout << "Encrypted message: ";
    // 逐个读取字符,直到遇到换行符
    while (cin.get(ch) && ch != '\n')
    {
        if (ch >= 'a' && ch <= 'z')
        {
            ch = ch + key;
            if (ch > 'z')
            {
                ch = ch - 'z' + 'a' - 1;
            }
        }
        else if (ch >= 'A' && ch <= 'Z')
        {
            ch = ch + key;
            if (ch > 'Z')
            {
                ch = ch - 'Z' + 'A' - 1;
            }
        }
        // 处理完直接输出当前字符
        cout << ch;
    }
    cout << endl;
    return 0;
}

关键改动说明

  • 移除了message数组,全程用单个char变量ch处理字符
  • 循环从基于数组终止符的for循环,改为基于字符读取的while循环,逻辑更直观:只要读取到的字符不是换行,就继续处理
  • 加密逻辑完全复用原代码的逻辑,保证加密效果一致
  • 添加cin.ignore()是因为cin >> key会把输入密钥后的换行符留在缓冲区,直接读取字符的话会先读到这个换行,导致循环直接结束,必须跳过

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:05:24