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

如何解决C++中vector<string>处理输入字符串输出不完整的bug

问题根因

你的代码核心问题是字符串遍历结束后,最后一段非空格内容没有被存入vector:

  • 遍历逻辑中只有遇到空格时才会触发将s2存入vector的操作,输入Hello World遍历到最后一个字符d时,由于不是空格,只会被追加到s2中,随后直接触发continue,不会进入后续的push逻辑
  • 循环结束后没有补充处理s2中剩余的内容,最终vector里只有Hello这一个元素
修复方案

有两种常用修复方式:

方式1:循环结束后追加剩余内容

在for循环结束后,额外将s2中剩余的内容push进vector即可,修改后的完整代码如下:

#include <bits/stdc++.h>

using namespace std;

int main()
{
    string s1;
    getline(cin, s1);
    vector<string> vs1;
    string s2;
    for (int i = 0; i < s1.size(); i++) {
        if (s1[i] != ' ') {
            s2.push_back(s1[i]);
            continue;
        }
        vs1.push_back(s2);
        s2.clear();
    }
    // 新增:处理最后一段非空格内容
    vs1.push_back(s2);
    for (string t : vs1) {
        cout << t << " ";
    }

    return 0;
}

方式2:调整判断逻辑顺序

把判断是否要截断的逻辑放到最前面,避免continue跳过边界判断:

#include <bits/stdc++.h>

using namespace std;

int main()
{
    string s1;
    getline(cin, s1);
    vector<string> vs1;
    string s2;
    for (int i = 0; i < s1.size(); i++) {
        // 先判断是否到了需要截断的位置
        if (s1[i] == ' ') {
            vs1.push_back(s2);
            s2.clear();
            continue;
        }
        s2.push_back(s1[i]);
    }
    vs1.push_back(s2);
    for (string t : vs1) {
        cout << t << " ";
    }

    return 0;
}
额外优化提示

如果需要兼容连续多空格、首尾空格的场景,可以在push s2前加非空判断,避免存入空字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:18:00