You need to enable JavaScript to run this app. C++两个字符串首字符交换失效,输出仍为'splendid day'如何解决
优惠活动
大模型
产品
解决方案
定价
更多

C++两个字符串首字符交换失效,输出仍为'splendid day'如何解决

C++字符串首字符交换逻辑问题排查

错误根因梳理

  • 手动交换的赋值流程完全错位:
    原代码写的三步手动交换逻辑:
    temporary = a[0];
    b[0] = a[0];
    b[0] = temporary;
    
    这段逻辑全程没有修改a[0]的值,连续两步都在给b[0]赋值,最终b[0]被覆盖为原a[0]的s,完全没有把b[0]的原首字符d赋值给a[0],交换的核心双向赋值流程缺了一半。
  • 后续冗余的swap操作失效:
    经过上面三步错误赋值后,a[0]还是原s,b[0]已经被改成和a[0]一样的s,此时执行swap(a[0], b[0])相当于两个相同值互换,没有任何实际效果,这也是最终输出和输入完全一致的直接原因。
  • 变量类型定义不合理:temporary被定义为string类型,用来暂存单个字符不符合语义,虽然能通过隐式转换编译,但容易引发逻辑混淆。
  • 无意义的冗余代码:输入流程后添加的cin.get()在当前逻辑下没有实际作用,既不会影响交换结果,也没有承担预期的捕获换行的功能,可以直接删除。

正确实现方案

完全可以省略手动写临时变量的流程,直接调用字符级别的swap完成需求,修正后最简代码如下:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string a, b; 

    cout << "Input two words: " << endl;
    cin >> a >> b;

    // 直接交换两个字符串的首字符,无需手动写临时变量逻辑
    swap(a[0], b[0]);

    cout << "The two words you entered are: " << a << " " << b << endl;

    return 0;
}

如果需要手动实现交换逻辑,按照标准三变量交换流程修正即可:

char temp;
temp = a[0];
a[0] = b[0];
b[0] = temp;

效果验证

输入splendid day时,代码会将首字符s和d互换,最终输出dplendid say,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 15:24:07