delphi – 如何确定字符串中的所有字符是否相等
发布时间:2020-12-15 04:13:47 所属栏目:大数据 来源:网络整理
导读:我需要知道字符串中的所有字符是否相等(由相同的字符组成).函数必须返回true或false,具体取决于字符串的所有元素是否等于特定的char. 我写了这个功能很好,但我正在寻找一个更优化(最快)的解决方案,字符串可以有数千个字符. function AllElementsAreEqual(Ele
我需要知道字符串中的所有字符是否相等(由相同的字符组成).函数必须返回true或false,具体取决于字符串的所有元素是否等于特定的char.
我写了这个功能很好,但我正在寻找一个更优化(最快)的解决方案,字符串可以有数千个字符. function AllElementsAreEqual(Element:Char;Str:String):Boolean; var i : Integer; begin Result:=True; if Str<>'' then for i:=1 to Length(Str) do if Str[i]<>Element then begin Result:= False; exit; end; end; UPDATE function AllElementsAreEqual(Const Element:Char;Str:String):Boolean;inline; type ArrayInt = Array of Integer; var i : Integer; Delta: Integer; List : ArrayInt; Test : Integer; begin Result:=True; Delta:=(Length(Str) mod 4); if Delta<>0 then Str:=Str+StringOfChar(Element,4-Delta); Test:=Ord(Element) + Ord(Element) shl 8 + Ord(Element) shl 16 + Ord(Element) shl 24; List:=ArrayInt(@(Str[1])); for i:=0 to ((Length(Str) div 4)-1) do if List[i]<>Test then begin Result:=False; exit; end; end; 更新2 对不起,但是我发布了一个旧的解决方案实现(有一个bug),现在已修复. 解决方法
您可以考虑使用Element重复4次创建一个Integer值(因为这是Delphi 7中的AnsiChar),移动像Ord(Element)Ord(Element)shl 8 Ord(Element)shl 16 Ord(Element)shl 24,然后进行类型转换字符串到PIntegerArray(^数组[0..MaxInt div 4 – 1]的整数)并循环它长度(Str)div 4次,比较为整数而不是字符.你需要手动比较最后几个Length(str)mod 4字符.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |