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

C++代码输出重复字符问题排查(已找到修复方案)

问题分析与修复

你的代码输出出现重复字符(如预期SuCh却得到SSuuCChh),核心问题和修复方案如下:

1. 冗余的条件判断破坏逻辑

第三个分支的else if(L%1==0)完全多余——任何整数对1取模结果都是0,这个条件永远为真,完全可以直接替换成else,让逻辑更清晰:当L为奇数时自动执行小写转换。

从你提供的代码来看,循环本身是每个字符处理一次,但如果实际运行的代码中误将else if写成了独立的if,就会导致每个字符被两次输出(先执行大写分支,再执行小写分支),最终出现重复字符的情况。

2. 空格处理逻辑存在隐患

你当前处理空格时执行L = L - 2,试图抵消之前的两次L++,但如果空格出现在字符串开头或连续出现,会导致L变成负数,破坏后续的大小写交替规则。如果希望空格不打断交替节奏,直接输出空格且不修改L即可;如果需要每个单词重新开始交替,则将L重置为0。

修复后的代码

#include <cctype>
#include <iostream>
#include <string> // 显式包含string头文件,避免编译器依赖

using namespace std;

int main()
{
    string mani;
    int L = 0;
    getline(cin, mani);
    for (int i = 0; i < mani.length(); ++i) {
        if (mani.at(i) == ' ') {
            cout << ' ';
            // 若需每个单词重新交替,替换为 L = 0;
        } else if (L % 2 == 0) {
            // 强制转换为unsigned char,避免有符号char的未定义行为
            putchar(toupper(static_cast<unsigned char>(mani.at(i))));
            ++L;
        } else {
            putchar(tolower(static_cast<unsigned char>(mani.at(i))));
            ++L;
        }
    }
    return 0;
}

关键说明

  • 替换冗余的else if(L%1==0)为else,消除逻辑歧义。
  • 添加static_cast<unsigned char>避免toupper/tolower处理有符号字符时的未定义行为。
  • 调整空格处理逻辑,根据需求选择保持交替节奏或重置计数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:10:37