Как определить, все ли символы в строке равны

Мне нужно знать, все ли символы в строке равны (образованы одним и тем же символом). функция должна возвращать истину или ложь в зависимости от того, равны ли все элементы строки определенному символу.

Я написал эту функцию, которая работает хорошо, но я ' наконец, используя предложение Барри Келли и добавив директиву 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 за создание лучшей реализации предложения Барри.

5
задан Community 23 May 2017 в 12:08
поделиться