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

基于CString实现自定义Tokenize函数的技术咨询

嘿,看来你正在尝试用CString实现一个自定义的Tokenize函数,专门处理以(ENDWPT)为分隔符的文本对吧?我正好有个清晰的实现方案,结合你提到的定位分隔符、提取文本的思路,给你整理出来了。

实现思路
  • 首先确定分隔符的固定长度:(ENDWPT)的长度是8,提前定义好可以避免硬编码带来的错误
  • 循环查找分隔符的位置:每次找到后,提取当前起始位置到分隔符前的子串,再把起始位置更新到分隔符之后,继续下一轮查找
  • 处理末尾剩余文本:循环结束后,别忘了把最后一段没有分隔符的内容也加入结果集合
完整代码示例
#include <afx.h>
#include <vector>

std::vector<CString> CustomTokenize(const CString& input, const CString& delimiter)
{
    std::vector<CString> tokens;
    // 空输入或空分隔符直接返回空集合
    if (input.IsEmpty() || delimiter.IsEmpty())
    {
        return tokens;
    }

    int delimiterLen = delimiter.GetLength();
    int startPos = 0;
    int foundPos = input.Find(delimiter, startPos);

    while (foundPos != -1)
    {
        // 提取当前起始位置到分隔符前的子串
        CString token = input.Mid(startPos, foundPos - startPos);
        // 可选:去掉token前后的空白字符(根据你的需求调整)
        token.Trim();
        if (!token.IsEmpty())
        {
            tokens.push_back(token);
        }

        // 更新起始位置到分隔符的下一个字符
        startPos = foundPos + delimiterLen;
        // 继续查找下一个分隔符
        foundPos = input.Find(delimiter, startPos);
    }

    // 处理最后一段没有分隔符的文本
    CString finalToken = input.Mid(startPos);
    finalToken.Trim();
    if (!finalToken.IsEmpty())
    {
        tokens.push_back(finalToken);
    }

    return tokens;
}

// 测试用例
int main()
{
    CString inputText = _T("11111 22222 (ENDWPT) 222222 333333 (ENDWPT) 6060606 ggggggg hhhhhhh (ENDWPT) iiiiiii jjjjjjj kkkkkkk lllllll mmmmmmm nnnnnnn");
    CString delimiter = _T("(ENDWPT)");

    std::vector<CString> result = CustomTokenize(inputText, delimiter);

    // 输出分词结果
    for (const auto& token : result)
    {
        wprintf(_T("%s\n"), token.GetString());
    }

    return 0;
}
关键细节说明
  • 分隔符查找:使用CString::Find方法,每次从更新后的startPos开始查找,确保不会重复匹配同一个分隔符
  • 子串提取:CString::Mid方法的第二个参数是子串长度,这里用foundPos - startPos刚好得到分隔符前的有效内容长度
  • 空白处理:Trim()方法是可选操作,如果你的需求需要保留token前后的空格(比如原始文本中的空格),可以直接去掉这一步
  • 边界判断:加入了空输入和空分隔符的判断,避免程序出现异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:53:07