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

C++字符串反转代码仅半部分生效,循环索引问题求助

字符串反转问题的修复方案

你的代码问题出在循环遍历了整个字符串长度,并且直接赋值覆盖了原字符。当循环进行到字符串的后半段时,你要替换的目标位置已经被前半段的替换操作修改过了,导致后半段无法正确取到原始的字符。比如输入Welcome(长度7):

  • 前3次循环(chara=0,1,2):把第6、5、4位的字符赋值给0、1、2位,此时字符串变成emoc + ome
  • 后续循环(chara=3到6):你试图把第3、2、1、0位的字符赋值给3、4、5、6位,但此时第2、1、0位已经是修改后的o、m、e,所以赋值后后半段没有变化,最终得到emocome。

修复方案

要正确反转字符串,你需要:

  • 只遍历字符串的前半部分,和后半段对应位置的字符交换
  • 交换时用临时变量保存其中一个字符,避免被覆盖

手动交换的修正代码

#include <iostream>
#include <string>

using namespace std;

int main(){
    string line; 
    cin >> line;
    int c = line.size(); // 直接用string的size()方法获取长度,无需手动循环计数
    for (int chara = 0; chara < c / 2; chara++) { // 只遍历前半部分
        // 保存原位置的字符,避免被覆盖
        char temp = line[chara];
        // 交换对应位置的字符
        line[chara] = line[c - chara - 1];
        line[c - chara - 1] = temp;
    }
    cout << line;
    return 0;
}

更简洁的标准库写法

如果你想省去手动交换的逻辑,可以直接用C++标准库提供的reverse函数:

#include <iostream>
#include <string>
#include <algorithm> // 必须包含此头文件以使用reverse

using namespace std;

int main(){
    string line; 
    cin >> line;
    reverse(line.begin(), line.end()); // 直接调用reverse函数完成反转
    cout << line;
    return 0;
}

内容的提问来源于stack exchange,提问作者Sofia Gamiño

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:22:38