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

C++ while循环字符串拼接字符异常:无法正确生成目标单词

问题:C++字符拼接异常,无法生成目标单词

问题场景

编写C++程序时,需要先指定目标单词的字符数量,再逐个输入字符并拼接成完整单词,但运行后无法得到预期的拼接结果,输出异常。以单词house(5个字符)为例,程序执行后输出错误内容。

原代码

int numbersOfCharacters=5;
int counter=0;
char character;
string phrase;

while (counter < numbersOfCharacters)
{
    cout << "Introduce character's number " << counter << ": ";
    cin >> character;
    counter = counter + 1;
    phrase=character+character; //I'm not sure if I need an array here.
}

cout << "Concatenated characters: " << phrase << endl;

实际输出

Introduce character's number 0: h
Introduce character's number 1: o
Introduce character's number 2: u
Introduce character's number 3: s
Introduce character's number 4: e
Concatenated characters: ?

预期输出

Concatenated characters: house

错误原因

核心问题出在字符拼接的代码行:phrase=character+character;

  • 两个char类型相加时,实际是对它们的ASCII值进行整数加法运算,得到的结果是一个整数,将其赋值给string类型的phrase时,会触发字符串的初始化逻辑,用该整数对应的ASCII字符(通常是不可见字符或乱码)覆盖整个字符串。
  • 每次循环都会完全覆盖phrase之前的内容,而不是将新字符追加到字符串末尾。

修正方案

将拼接逻辑改为追加字符,使用C++字符串的+=操作符,或者直接将字符与原字符串相加后重新赋值:

修正后的代码

int numbersOfCharacters=5;
int counter=0;
char character;
string phrase;

while (counter < numbersOfCharacters)
{
    cout << "Introduce character's number " << counter + 1 << ": ";
    cin >> character;
    counter++;
    phrase += character; // 正确的追加操作
}

cout << "Concatenated characters: " << phrase << endl;

运行该代码后,即可正确拼接输入的字符,得到预期的house结果。

感谢John的提示以及Remy Lebeau提供的详细信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:20:33