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

C++中如何使用多字符分隔符替代getline函数

多字符分隔符(||)分割宽字符字符串的实现方案

需求背景

标准库的getline函数不支持多字符分隔符,现需以双竖线||作为分隔符分割宽字符字符串,要求使用vector存储结果,且不能使用strstr或strtok函数。

原单竖线分割代码(存在问题)

原代码使用单竖线|作为分隔符,无法满足||分隔的需求,代码如下:

wchar_t *sGroups = L"group1||group2||group3";
wstringstream wSS(sGroups);
wstring wOut;
vector<wstring> vGroup;
while (wSS.good())
{
    //getline(wSS, wOut, L'||');  // <- 此写法对getline无效
    getline(wSS, wOut, L'|');
    vGroup.push_back(wOut);
}

size_t i = 0;
wchar_t sGroup[256]{};
while (i < vGroup.size())
{
    if (vGroup[i].length() > 0)
    {
        StringCchCopyW(sGroup, 256, vGroup[i].c_str());

        // 对sGroup执行业务逻辑
    }
    i++;
}

解决方案:自定义多字符分隔的getlinemultiple函数

针对宽字符(wchar_t)实现支持多字符分隔的自定义函数getlinemultiple,替代原getline函数:

std::wstring getlinemultiple(std::wistream& in, std::wstring delimiter)
{
    std::wstring cr;
    wchar_t delim = *(delimiter.rbegin());
    size_t sz = delimiter.size(), tot;

    do 
    {
        wstring temp;
        getline(in, temp, delim);
        cr += temp + delim;
        tot = cr.size();
    }
    while ((tot < sz) || (cr.substr(tot - sz, sz) != delimiter));

    return cr.substr(0, tot - sz);  // 若需保留分隔符,可改为 return cr;
}

修改后的代码

将原代码中的getline调用替换为自定义函数即可,修改后的完整代码如下:

wchar_t *sGroups = L"group1||group2||group3";
wstringstream wSS(sGroups);
wstring wOut;
vector<wstring> vGroup;
while (wSS.good())
{
    wOut = getlinemultiple(wSS, L"||");
    vGroup.push_back(wOut);
}

size_t i = 0;
wchar_t sGroup[256]{};
while (i < vGroup.size())
{
    if (vGroup[i].length() > 0)
    {
        StringCchCopyW(sGroup, 256, vGroup[i].c_str());

        // 对sGroup执行业务逻辑
    }
    i++;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:26:04