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

如何在不使用指针、引用等的前提下将单词首字母存入initials字符串?

如何在不使用指针、引用或std::相关内容的情况下收集句子中单词的首字母?

你当前的代码能输出空格后的首字母,但initials字符串只保留了最后一个,而且还漏掉了第一个单词的首字母!咱们一步步来修复:

问题分析

  1. 赋值覆盖而非追加:你用了initials=name[i+1];,这会把之前initials里的内容完全替换掉,每次循环都会只留下当前的字母,最后自然只剩最后一个首字母。
  2. 遗漏第一个单词的首字母:你的逻辑只处理了空格后面的字母,但第一个单词的首字母(也就是字符串的第一个字符)完全没被加入到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:43