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

C++使用指定分隔符解析字符串,重复分隔符处理问题求助

字符串分割函数问题分析与修复

问题根源

你的代码逻辑错误出在判断条件上:
当使用std::getline(ss, token, delimiter)处理连续分隔符(比如多个空格)时,两次分隔符之间的内容是空字符串("")。而你写的判断if(token != delimiterToString),是在拿空字符串和单个分隔符组成的字符串(比如" ")做比较——这两个值永远不相等,所以空字符串会被错误地加入结果vector中,导致最终结果包含空白内容。

另外,delimiterToString这个变量完全多余,没有存在的必要。

修复后的代码

把判断条件改成检查token是否非空即可,修正后的代码如下:

std::vector<std::string> stringParse(const std::string &s, char delimiter) {
    std::vector<std::string> result;
    std::stringstream ss(s);
    std::string token;

    while (std::getline(ss, token, delimiter)) {
        if (!token.empty()) {  // 过滤掉分隔符连续产生的空字符串
            result.push_back(token);
        }
    }

    return result;
}

针对空格分割的简化方案

如果你的需求只是分割空格分隔的单词,C++标准库的>>运算符可以更简洁地解决问题——它默认会自动跳过所有空白字符(包括连续空格、换行符、制表符等),直接读取非空白的单词:

std::vector<std::string> stringParse(const std::string &s) {
    std::vector<std::string> result;
    std::stringstream ss(s);
    std::string token;

    // >> 自动跳过空白,直接提取有效单词
    while (ss >> token) {
        result.push_back(token);
    }

    return result;
}

这个版本处理你的测试字符串"test test1 test2"时,会直接得到包含"test"、"test1"、"test2"三个元素的vector,完全不需要手动处理分隔符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:32:08