C++代码无法打印第二个字符数组,交换字符串首字母功能异常
问题诊断与修复方案
嘿,从你描述的现象来看,问题十有八九是你只输出了第一个字符串A,完全没写第二个字符串B的输出语句!毕竟你已经知道用临时变量避免覆盖,交换逻辑应该是对的,不然连"ebcd"都出不来~
先给你看个和你情况匹配的错误代码示例:
#include <iostream> #include <string> using namespace std; int main() { string A = "abcd"; string B = "efgh"; // 交换首字母的逻辑是对的,但输出漏了B char temp = A[0]; A[0] = B[0]; B[0] = temp; cout << A; // 这里只打印了A,B完全没输出! return 0; }
这段代码跑起来确实只会输出ebcd,完全看不到交换后的B。修复起来很简单,补全输出就行,顺便给你加个空字符串的防护,避免踩坑:
修复后的完整代码
#include <iostream> #include <string> using namespace std; int main() { string A = "abcd"; string B = "efgh"; // 先判断两个字符串都不为空,防止访问空字符串的首字符导致崩溃 if (!A.empty() && !B.empty()) { char temp = A[0]; A[0] = B[0]; B[0] = temp; } // 同时输出两个字符串,用空格或者换行分隔都可以 cout << A << " " << B << endl; return 0; }
几个关键点再强调下:
- 输出不能偷懒:一定要明确写出打印两个字符串的代码,比如
cout << A << " " << B;,不然程序只会输出你写的那个字符串。 - 空字符串防护:加个非空判断很有必要,万一哪天输入的字符串是空的,访问
[0]会导致未定义行为(比如崩溃)。 - 你的临时变量用法是对的:这部分没毛病,不用怀疑自己,就是输出环节漏了~
要是你的代码还有其他特殊逻辑(比如字符串是用户输入的,或者有其他操作),可以把完整代码贴出来,但目前根据你说的现象,核心问题就是输出遗漏啦。
内容的提问来源于stack exchange,提问作者Fall0ut
相关产品推荐
相关产品推荐

