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

C++ 遍历字符串分割单词到vector的迭代逻辑优化方法

问题根因

  • last变量未初始化,直接执行last++属于未定义行为,运行结果不可控
  • 字符串最后一个单词末尾没有空格,遍历结束后不会触发else分支的存入逻辑,导致最后一个单词丢失
  • 原代码没有处理连续空格、首尾空格的边界情况,遇到这类输入会存入空字符串

优化后代码

#include <vector>
#include <string>

std::vector<std::string> wordChopper(const std::string& s) // 改为const引用更合理,不需要修改原字符串
{
    std::vector<std::string> words;
    if (s.empty()) return words; // 空输入直接返回
    
    int first = 0;
    int word_len = 0; // 替换last,明确表示是当前单词长度,初始化避免未定义行为

    for (unsigned int i = 0; i < s.size(); i++)
    {
        if (s[i] != ' ')
        {
            word_len++; 
        }
        else
        {
            if (word_len > 0) // 过滤连续空格的空字符串
            {
                words.push_back(s.substr(first, word_len));
                word_len = 0;
            }
            first = i + 1;
        }
    }
    // 循环结束后处理末尾的最后一个单词
    if (word_len > 0)
    {
        words.push_back(s.substr(first, word_len));
    }
    return words;
}

优化说明

  • 参数改为const std::string&,避免不必要的拷贝同时保证不会修改原字符串
  • 初始化单词长度变量为0,消除未定义行为
  • 遍历结束后额外判断一次当前单词长度,大于0就存入vector,解决最后一个单词丢失的问题
  • 增加长度判断逻辑,遇到连续空格、首尾空格时不会存入无效的空字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:15:03