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

反转输入字符串时输出意外为空,可打印单个反转元素求技术帮助

解决C++字符串反转无输出的问题

我来帮你排查这个问题——你的代码里存在一个未定义行为的错误,这就是程序没有输出的核心原因。

问题根源

你定义的s2是默认构造的空字符串,它的初始长度为0。当你在循环里执行s2[a] = s1[n-1-a];时,实际上是在访问超出s2内存范围的非法位置,这属于越界访问内存的行为。这种情况下程序的结果是不可预测的:可能没有输出、直接崩溃,甚至偶尔看似“正常”但隐藏着严重隐患。你能单独打印单个字符只是巧合,不代表逻辑正确。

几种修复方案

方案1:预先为s2分配足够空间

在使用s2之前,先给它分配和s1相同的长度,确保每个索引位置都有合法的内存空间:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1;
    cin >> s1;
    int n = s1.size();
    string s2(n, '\0'); // 初始化时指定长度为n,填充空字符
    for(int a = 0; a < n; a++) {
        s2[a] = s1[n-1-a];
    }
    cout << s2;
}

也可以用resize方法来分配空间:

// ... 前面代码不变
string s2;
s2.resize(n); // 调整s2的长度为n,分配对应内存
// ... 循环赋值逻辑不变

方案2:使用push_back动态添加字符

不需要预先分配空间,每次把反转后的字符添加到s2末尾,string会自动处理内存扩容:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1;
    cin >> s1;
    int n = s1.size();
    string s2;
    for(int a = 0; a < n; a++) {
        s2.push_back(s1[n-1-a]); // 逐个添加字符到s2末尾
    }
    cout << s2;
}

方案3:直接使用标准库的reverse函数(最简洁高效)

C++标准库提供了现成的反转算法,包含<algorithm>头文件后直接调用即可,代码更简洁且性能更优:

#include <iostream>
#include <string>
#include <algorithm> // 必须包含这个头文件
using namespace std;

int main() {
    string s1;
    cin >> s1;
    reverse(s1.begin(), s1.end()); // 直接反转s1本身
    cout << s1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:37:07