admin 发表于 2024-3-6 11:47:14

字符串操作

void StringUtil::Split(const CString& text, const ACHAR* separator, std::vector<CString>& result, bool bAddEmptyStr)
{
        int prev = 0, current = 0;// 初始化两个指针,prev(前一个索引号)和current(当前索引号),都设置为0
        CString strCopyTxT = text;// 创建一个text的副本,并去除其右边的空格
        strCopyTxT.TrimRight(采用T(" "));
        if (strCopyTxT.Find(separator,0)<0)//如果在副本中找不到分隔符,未找到返回-1,那么整个副本就是一个单独的字符串
        {
                if (strCopyTxT.GetLength()>0)
                {
                        result.push采用back(strCopyTxT);// 如果副本的长度大于0,则将其添加到字符串容器中
                }
                // 如果传入的字符串长度为0,啥也不添加
                return;
        }
        // 以下为至少发现一个分隔符,获得字符串总长度
        int length = strCopyTxT.GetLength();// 初始化一个标志位,表示是否已经找到了所有的分隔符
        bool bExit = false;
        while (true)// 开启无限循环:注意循环中的break语句
        {
                current = strCopyTxT.Find(separator, prev); // 在副本中查找分隔符,从prev指针的位置开始查找
                if (current == -1)// 到最后一组了
                {
                        current = length;
                        bExit = true;// 如果找不到分隔符,将整个字符串长度赋值current,标识退出变量为真
                }
                // 取最后一个分隔符到结尾的字符串,Mid见下注释
                CString item = strCopyTxT.Mid(prev, current - prev);
               
                if (bAddEmptyStr || item.GetLength()>0)
                {   // 添加进容器的条件:每个提取的子字符串是否过滤0长度
                        result.push采用back(item);// 如果bAddEmptyStr为true,或者子字符串的长度大于0,则将子字符串添加到结果列表中
                }
                if (bExit)
                {
                        break;// 如果已经找到了所有的分隔符,那么跳出循环
                }
                prev = current + int(采用tcslen(separator)); // 将prev指针移动到当前分隔符的后面,以便在下一次循环中查找下一个分隔符
        }
}
// 合并字符串:传入字符串容器、分隔符,返回合并的字符串
CString StringUtil::Join(const std::vector<CString>& items, const ACHAR *spearator)
{
        CString strResult;// 逐个拼接容器中的字符串
        for (int i = 0; i < items.size();i++)
        {
                strResult += items.at(i) + spearator;
        }// 删除右侧的空字符
        strResult.TrimRight(spearator);//调用'TrimRight'函数,从'strResult'的右侧删除所有的分隔符。这样做是为了避免在最后一个元素后面出现不必要的分隔符
        return strResult;// 返回拼接好的字符串
}
页: [1]
查看完整版本: 字符串操作