gpt4 book ai didi

delphi - 如何判断字符串中的所有字符是否相等

转载 作者:行者123 更新时间:2023-12-03 15:05:51 26 4
gpt4 key购买 nike

我需要知道字符串中的所有字符是否都相等(由相同的字符组成)。该函数必须返回 true 或 false,具体取决于字符串的所有元素是否等于特定字符。

我编写的这个函数运行良好,但我正在寻找更优化(最快)的解决方案,字符串可以有数千个字符。

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;

更新最后使用 Barry Kelly 建议并添加 inline 指令,性能得到显着提升。

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

很抱歉,我发布了解决方案的旧实现(有错误),现在已修复。感谢The_Fox更好地实现巴里建议。

最佳答案

您可以考虑创建一个 Integer 值,其中 Element 重复 4 次(因为这是 Delphi 7 中的 AnsiChar),像 Ord(Element) + Ord(Element) shl 8 + Ord(Element) shl 16 + Ord(Element) shl 24,然后将字符串类型转换为 PIntegerArray ( ^array[0..MaxInt div 4 - 1] of Integer) 并对其循环 Length(Str) div 4 次,作为整数而不是字符进行比较。不过,您需要手动比较最后几个 Length(str) mod 4 字符。

关于delphi - 如何判断字符串中的所有字符是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3869526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com