关于字符串按段截取的函数,请高手指导如何优化以提高性能!

Blackfire04 2007-08-16 07:22:01
CString SectionCut(LPCTSTR lpCode, int& nLayer, LPCTSTR lpToKen)
{
if(!lpCode)
return "";

if(!lpToKen)
lpToKen = ",";

LPCTSTR lpOld;
int nLen, n = 0, nLenToken = strlen(lpToKen);
CString csTemp, csResult;

while(lpCode)
{
lpOld = lpCode;
nLen = strlen(lpCode);

lpCode = strstr(lpCode, lpToKen);
n++;

if(lpCode == NULL)
{
break;
}

lpCode = lpCode + nLenToken;
if(nLayer > 0 && n == nLayer)
{
break;
}
}
if(nLayer < 0)
{
nLayer = n;
}
else
{
if(lpCode)
{
csTemp= lpOld;
nLen = nLen - nLenToken - strlen(lpCode);
csResult = csTemp.Left(nLen);
}
else
{
csResult = lpOld;
}
}
return csResult;
}

这个函数实现的功能是:当nLayer>0时,从lpCode串中,以分隔符lpToKen截取,第nLayer段;当nLayer<0时,计算lpCode串共可以被lpToKen分隔成几段。

由于这个函数需要在循环中执行约2,000,000次以上,所以对性能的要求比较高,请高手指导如何优化以提高性能,谢谢!!
...全文
210 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
村过去 2007-08-17
  • 打赏
  • 举报
回复
不用这么麻烦了,微软有个专用的库函数来拆分字符串的
Blackfire04 2007-08-17
  • 打赏
  • 举报
回复
谢谢楼上二位的指点,我试了一下,由于我需要解析的是中文字符串,且分隔符是一个中文符号“※”,在解析的时候,函数有时会出现解析错误的情况,相信跟中文占用两个字节相关,如果可以解决这个问题就好了!
emptyness 2007-08-16
  • 打赏
  • 举报
回复
"
返回段数,将切分点置为NULL('\0'),在nLayer中存放偏移值
或者传递一个偏移值的int型指针,保存所需的偏移值
"

这个就是strtok函数 的原理.应该算是速度快的..就直接使用strtok就挺好的.
那些库函数的实现 都是以高效率为第一原则的..
ok1234567 2007-08-16
  • 打赏
  • 举报
回复
不要使用CString,strstr等
使用一次指针扫描
返回段数,将切分点置为NULL('\0'),在nLayer中存放偏移值
或者传递一个偏移值的int型指针,保存所需的偏移值
int SectionCut(LPTSTR lpCode, int& nLayer, LPCTSTR lpToKen)
{
...
return iSec;
}
Blackfire04 2007-08-16
  • 打赏
  • 举报
回复
意思是说,根据nLayer参数是否大于0,分别需要实现两个不同功能:若nLayer>0,截取第nLayer 段;若nLayer<0,则计算源串一共可以被分成多少段,值从nLayer参数返回,这也是为什么nLayer参数设置成引用的原因。
liuxiuk 2007-08-16
  • 打赏
  • 举报
回复
这个函数实现的功能是:当nLayer>0时,从lpCode串中,以分隔符lpToKen截取,//第nLayer段//;当nLayer<0时,计算lpCode串共可以被lpToKen分隔成几段。

----

没怎么看明白..!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧