加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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
最后使用Barry Kelly建议并添加了内联指令,性能得到了显着提升.

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),现在已修复.
感谢The_Fox创建更好的Barry建议实施.

解决方法

您可以考虑使用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字符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读