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

C++如何按空格分割字符串但跳过反斜杠转义空格,无需自定义解析器可行吗?

我很惊讶这项需求如此常见,却还没有相关的问题提出。能否不自行编写解析器实现该功能?要求连续出现的多个空白符需直接跳过。若无法实现,以下是我提供的解决方案:

vector<string> split_with_backslash(const string &s)
{
    vector<string> ret;
    const char *ps = s.c_str();
    while (*ps++) {
        std::stringstream ss;
        switch (*ps) {
        default:
            ss << *ps;
            break;
        case ' ': case '\t': case '\n':
            ret.push_back(ss.str());
            ss.str(string());
            ss.clear();
            break;
        case '\\':
            if (!(*++ps == ' ' || *ps == '\t' || *ps == '\n'))
                --ps;
            break;
        }
    }
    return ret;
}

我不太擅长使用C++迭代器,所以此处使用了c_str()方法。

编辑: 为@MarekR补充wordexp相关示例,该内容和本问题高度相关,因为wordexp可以很好地处理引号、反斜杠转义,但无法处理下述特殊符号。

我此处正在实现执行流水线的预处理逻辑,通过该方式可以过滤wordexp无法处理的|符号,但目前还有<>&符号未处理(为简化逻辑暂不考虑&符号)。

vector<string> subcommands;
boost::split(subcommands, cpp_buf, boost::is_any_of("|"));
wordexp_t res;
switch (wordexp(subcommands.back().c_str(), &res, 0)) {
    case 0:
        break;
    case WRDE_NOSPACE:
        wordfree(&res);
    default:
        exit(EXIT_FAILURE);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:24:04