找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 149|回复: 0

字符串操作

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-3-6 11:47:14 | 显示全部楼层 |阅读模式
  1. void StringUtil::Split(const CString& text, const ACHAR* separator, std::vector<CString>& result, bool bAddEmptyStr)
  2. {
  3.         int prev = 0, current = 0;// 初始化两个指针,prev(前一个索引号)和current(当前索引号),都设置为0  
  4.         CString strCopyTxT = text;// 创建一个text的副本,并去除其右边的空格  
  5.         strCopyTxT.TrimRight(采用T(" "));
  6.         if (strCopyTxT.Find(separator,0)<0)//如果在副本中找不到分隔符,未找到返回-1,那么整个副本就是一个单独的字符串
  7.         {
  8.                 if (strCopyTxT.GetLength()>0)
  9.                 {
  10.                         result.push采用back(strCopyTxT);// 如果副本的长度大于0,则将其添加到字符串容器中  
  11.                 }
  12.                 // 如果传入的字符串长度为0,啥也不添加
  13.                 return;
  14.         }
  15.         // 以下为至少发现一个分隔符,获得字符串总长度
  16.         int length = strCopyTxT.GetLength();// 初始化一个标志位,表示是否已经找到了所有的分隔符
  17.         bool bExit = false;
  18.         while (true)// 开启无限循环:注意循环中的break语句
  19.         {
  20.                 current = strCopyTxT.Find(separator, prev); // 在副本中查找分隔符,从prev指针的位置开始查找
  21.                 if (current == -1)// 到最后一组了
  22.                 {
  23.                         current = length;
  24.                         bExit = true;// 如果找不到分隔符,将整个字符串长度赋值current,标识退出变量为真
  25.                 }
  26.                 // 取最后一个分隔符到结尾的字符串,Mid见下注释
  27.                 CString item = strCopyTxT.Mid(prev, current - prev);
  28.                
  29.                 if (bAddEmptyStr || item.GetLength()>0)
  30.                 {   // 添加进容器的条件:每个提取的子字符串是否过滤0长度
  31.                         result.push采用back(item);// 如果bAddEmptyStr为true,或者子字符串的长度大于0,则将子字符串添加到结果列表中
  32.                 }
  33.                 if (bExit)
  34.                 {
  35.                         break;// 如果已经找到了所有的分隔符,那么跳出循环
  36.                 }
  37.                 prev = current + int(采用tcslen(separator)); // 将prev指针移动到当前分隔符的后面,以便在下一次循环中查找下一个分隔符  
  38.         }
  39. }
  40. // 合并字符串:传入字符串容器、分隔符,返回合并的字符串
  41. CString StringUtil::Join(const std::vector<CString>& items, const ACHAR *spearator)
  42. {
  43.         CString strResult;// 逐个拼接容器中的字符串
  44.         for (int i = 0; i < items.size();i++)
  45.         {
  46.                 strResult += items.at(i) + spearator;
  47.         }// 删除右侧的空字符
  48.         strResult.TrimRight(spearator);//调用'TrimRight'函数,从'strResult'的右侧删除所有的分隔符。这样做是为了避免在最后一个元素后面出现不必要的分隔符
  49.         return strResult;// 返回拼接好的字符串
  50. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 14:22 , Processed in 0.124537 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表