• 主页
  • Windows SDK/API
  • 基础类
  • ActiveX
  • 数据库及相关技术
  • 网络及通讯开发
  • VCL组件使用和开发

从头搜索字符串可以用pos方法。从尾呢?

hsn1982 珠海市晟意网络科技有限公司 CTO/CIO/技术副总裁/总工程师  2005-07-04 10:20:25
从字符串末尾开始搜索用什么方法
...全文
172 点赞 收藏 7
写回复
7 条回复
F117p 2005年07月04日
原理也是将字符串反一下。
利用STL的:
reverse;

代码:
AnsiString str;
...
int L=str.Length();
char *tmp=new char[L];
strcpy(tmp,str.c_str());
using namespace std
reverse(tmp,tmp+L);//反转
str=tmp;
...
str.Pos(...
回复 点赞
僵哥 2005年07月04日
上面这个速度很慢,建议使用char数组+指针来操作,那样会快很多。
回复 点赞
僵哥 2005年07月04日
__int64 SwapPos(AnsiString strSource,AnsiString strFind)
{
__int64 pPos,pSLen,pFLen;

pPos=0;
pSLen=strSource.Length();
pFLen=strFind.Length();

if(pSLen==pFLen&&strSource==strFind)
return 1;

if(pSLen<pFLen)
return 0;

for(__int64 i=0;i<pSLen;i++)
{
AnsiString strTmp=strSource.SubString(pSLen-pFLen+1-i,pFLen);
if(strTmp==strFind)
{
pPos=pSLen-pFLen+1-i;
break;
}
}
return pPos;
}
回复 点赞
僵哥 2005年07月04日
{
__int64 pPos,pSLen,pFLen;

pPos=0;
pSLen=strSource.Length();
pFLen=strFind.Length();

if(pSLen==pFLen&&strSource==strFind)
return 1;

if(pSLen<pFLen)
return 0;

for(__int64 i=0;i<pSLen;i++)
{
AnsiString strTmp=strSource.SubString(pSLen-pFLen+1-i,pFLen);
if(strTmp==strFind)
{
pPos=pSLen-pFLen+1-i;
break;
}
}
return pPos;
}
回复 点赞
F117p 2005年07月04日
既然是只是单独的字符串,
理论上这点开销对于系统来说,无关痛痒
如果实在是很大的串,可以考虑将原串分割成N个小串,再进行操作。
回复 点赞
Waiting4you 2005年07月04日
没有,把两个字符串反过来再用Pos方法
回复 点赞
僵哥 2005年07月04日
如果要查找的源串相当大是,那么楼上的操作开销可不蛮小哦。
回复 点赞
发动态
发帖子
C++ Builder
创建于2007-08-02

2567

社区成员

10.2w+

社区内容

C++ Builder相关内容讨论区
社区公告
暂无公告