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

C语言凯撒密码实现中如何将加密字符拼接为完整字符串输出

问题原因

你当前出现单字符逐行输出的问题有两个直接诱因:

  1. 你在打印单字符的printf语句末尾加了\n换行符,每打印一个字符就会自动换行
  2. 你把cyphertext:前缀的打印逻辑写在了字符处理循环内部,每次处理单个字符都会重复打印前缀

解决方法

方法1:调整打印逻辑(无需拼接字符串,最简单实现)

不需要额外存储完整字符串,只需要调整打印的位置和格式即可:

  • 循环处理字符前,先单独打印一次cyphertext: 前缀
  • 循环内部处理完单个字符后,只打印字符本身,不追加换行符
  • 所有字符处理完毕后,统一打印一次换行符
    参考代码片段:
// 循环外先打印前缀
printf("cyphertext: ");
for (int i = 0; user_input[i] != '\0'; i++) {
    char encipher;
    if (isupper(user_input[i])) {
        int alphabet_index = user_input[i] - 'A';
        int calculate_value = (alphabet_index + key) % 26;
        encipher = calculate_value + 'A';
    } else if (islower(user_input[i])) {
        // 补充小写字母处理逻辑
        int alphabet_index = user_input[i] - 'a';
        int calculate_value = (alphabet_index + key) % 26;
        encipher = calculate_value + 'a';
    } else {
        // 非字母字符(空格、逗号等)直接保留
        encipher = user_input[i];
    }
    // 只打印字符,不加换行
    printf("%c", encipher);
}
// 全部处理完再换行
printf("\n");

方法2:拼接为完整字符串后统一打印

如果需要后续使用完整的密文字符串,可以提前申请缓冲区存储:

  • 声明一个长度和输入字符串一致+1的字符数组作为密文缓冲区,多出来的1位用来存储C语言字符串必须的结束符\0
  • 循环处理时把每个加密后的字符赋值到缓冲区对应下标位置
  • 循环结束后给缓冲区最后一位赋值\0,再一次性打印整个字符串
    参考代码片段:
int len = strlen(user_input);
// 申请缓冲区,多留1位存结束符
char cipher_result[len + 1];
for (int i = 0; i < len; i++) {
    if (isupper(user_input[i])) {
        int alphabet_index = user_input[i] - 'A';
        int calculate_value = (alphabet_index + key) % 26;
        cipher_result[i] = calculate_value + 'A';
    } else if (islower(user_input[i])) {
        int alphabet_index = user_input[i] - 'a';
        int calculate_value = (alphabet_index + key) % 26;
        cipher_result[i] = calculate_value + 'a';
    } else {
        cipher_result[i] = user_input[i];
    }
}
// 补充字符串结束符
cipher_result[len] = '\0';
// 一次性打印完整密文
printf("cyphertext: %s\n", cipher_result);

注:你需求里hello, world转uryyb, jbeyq是密钥为13的ROT13加密,对应上述代码里key=13即可实现对应效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 12:15:04