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
相关产品推荐
相关产品推荐

