如何在不使用指针、引用等的前提下将单词首字母存入initials字符串?
如何在不使用指针、引用或std::相关内容的情况下收集句子中单词的首字母?
你当前的代码能输出空格后的首字母,但initials字符串只保留了最后一个,而且还漏掉了第一个单词的首字母!咱们一步步来修复:
问题分析
- 赋值覆盖而非追加:你用了
initials=name[i+1];,这会把之前initials里的内容完全替换掉,每次循环都会只留下当前的字母,最后自然只剩最后一个首字母。 - 遗漏第一个单词的首字母:你的逻辑只处理了空格后面的字母,但第一个单词的首字母(也就是字符串的第一个字符)完全没被加入到
initials里。
修改后的代码
#include <iostream> #include <string> using namespace std; int main() { string name = ""; string initials = ""; name = "First Second Third"; // 先加入第一个单词的首字母 if (!name.empty()) { initials += name[0]; } for(int i=0; i<name.length(); i++){ if(name[i] == ' ') { // 用字符' '比ASCII码32可读性更好 // 确保i+1不越界(虽然你的例子没问题,但养成好习惯) if (i+1 < name.length()) { cout << name[i+1]; initials += name[i+1]; // 用+=追加,而不是=覆盖 } } } cout << "\nYour initials are " << initials << "."; return 0; }
关键修改点
- 用
initials += name[i+1]替代initials=name[i+1]:这样每次找到的首字母会追加到initials的末尾,而不是覆盖原有内容。 - 提前加入第一个单词的首字母:检查字符串非空后,直接把第一个字符加入
initials,确保第一个单词的首字母不会漏掉。 - 用
' '代替ASCII码32:代码可读性更高,别人一眼就能看懂是判断空格。 - 增加越界检查:防止当字符串末尾是空格时,访问
name[i+1]导致的错误(虽然你的测试用例没有这种情况,但代码更健壮)。
运行这段代码后,输出会是:ST,然后换行显示Your initials are FST.,完美收集到所有单词的首字母!
内容的提问来源于stack exchange,提问作者user12138795
相关产品推荐
相关产品推荐

