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

C++实现字符串首尾字符交换代码输出异常问题求助

问题分析

  • 缺少必要头文件:操作std::string需要引入<string>头文件,部分编译器未隐式包含该头文件时会直接编译失败。
  • 存在多余无效输入逻辑:你的需求是交换字符串本身的首尾字符,不需要额外输入两个字符,代码中cin >> pr1、cin >> pr2属于冗余逻辑,还会导致程序运行时等待额外输入,和需求不符。
  • 循环逻辑完全冗余:你编写的for循环仅遍历字符串不断覆盖pr1、pr2的值,最终仅能拿到字符串的首、尾字符,不需要遍历操作,直接通过下标取对应位置字符即可。
  • 字符串拼接逻辑错误:你将尾字符、完整原字符串、首字符直接拼接,相当于在原字符串前后分别新增尾字符和首字符,完全没有实现交换效果,这是输出异常的核心原因。
  • 缺少边界判断:如果输入字符串为空或长度为1,直接取下标0和length()-1会出现内存越界错误。

修改后代码

版本1:直接修改原字符串(推荐,写法简洁高效)

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

int main()
{
    string sentence;
    getline(cin, sentence);
    // 长度小于2的字符串不需要交换
    if (sentence.size() >= 2) {
        // 直接调用标准库swap方法交换首尾字符
        swap(sentence[0], sentence[sentence.size() - 1]);
    }
    cout << sentence;
    return 0;
}

版本2:保留原字符串,生成新的输出字符串

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

int main()
{
    string sentence;
    getline(cin, sentence);
    string output;
    if (sentence.size() < 2) {
        output = sentence;
    } else {
        // 拼接规则:尾字符 + 去掉首尾的中间字符串 + 首字符
        output = sentence.back() + sentence.substr(1, sentence.size() - 2) + sentence.front();
    }
    cout << output;
    return 0;
}

优化说明

  • 补充了必要的<string>头文件,保证全平台编译兼容。
  • 移除了所有冗余变量和无效输入逻辑,代码结构更清晰。
  • 增加了字符串长度边界判断,避免空字符串、单字符字符串的访问越界问题。
  • 直接调用标准库方法实现需求,执行效率更高,可读性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:45:02