大佬教程收集整理的这篇文章主要介绍了任何内置的Delphi函数,如PosEx,从字符串后面找到一个子字符串?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在删除对FastStrings库的所有调用,我使用的其中一个函数是FastPosBack:
function FastPosBack(const aSourceString,aFindString : AnsiString; const aSourceLen,aFindLen,StartPos : Integer) : Integer;
我找到了LastDelimiter,但它不是完全相同的东西,因为它只找到最后的分隔符而我无法指定起始位置.
谢谢!
更新:在DR评论之后,我创建了这个函数:
function FastPosBack(const aSourceString,aFindString : String; const aSourceLen,StartPos : Integer) : Integer; var RevSourceString,RevFindString: string; begin RevSourceString := AnsiReverseString(aSourceString); RevFindString := AnsiReverseString(aFindString); Result := Length(aSourceString) - PosEx(RevFindString,RevSourceString,StartPos) + 1; end;
有没有更有效的方法呢?在1000000循环周期中,Pos需要47ms而FastPosBack需要234ms才能完成.
function RPos(const aSubStr,aString : String; const aStartPos: Integer): Integer; overload; var i: Integer; pStr: PChar; pSub: PChar; begin pSub := Pointer(aSubStr); for i := aStartPos downto 1 do begin pStr := @(aString[i]); if (pStr^ = pSub^) then begin if CompareMem(pSub,pStr,Length(aSubStr)) then begin result := i; EXIT; end; end; end; result := 0; end; function RPos(const aSubStr,aString : String): Integer; overload; begin result := RPos(aSubStr,aString,Length(aString) - Length(aSubStr) + 1); end;
重载提供了一种使用最有效的startpos调用RPos的方法,用于从字符串的最末端进行搜索,而无需自己计算.为了提高效率,在明确指定时不对startpos执行检查.
在我的SmokeTest性能测试套件中,这比你的FastPosBack快20%左右(偶然包含一个“off by one”错误以及需要一些它实际上没有使用的参数).
以上是大佬教程为你收集整理的任何内置的Delphi函数,如PosEx,从字符串后面找到一个子字符串?全部内容,希望文章能够帮你解决任何内置的Delphi函数,如PosEx,从字符串后面找到一个子字符串?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。