Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сравнить две строки!


KLAUS ©   (2006-05-20 14:11:00) 

Всем Привет!!
Народ подскажите как сравнить две строки по байтно?
Только без WildStringCompare!


AlexWlad   (2006-05-20 20:53:00) [1]

Если нужна скорость попробуй такую процедуру.

function AW_CompareMem(P1, P2: Pointer; Length: Integer): Integer; assembler;
asm
       PUSH    ESI
       PUSH    EDI
       MOV     ESI,P1
       MOV     EDI,P2
       MOV     EDX,ECX  // Length
       XOR     EAX,EAX
       AND     EDX,3    // число байт в хвосте - Length mod 4
       SHR     ECX,1    // div 2 - WORD
       SHR     ECX,1    // div 2 - DWORD
       REPE    CMPSD
       JE      @@1      // все DWORD равны, анализ хвоста
       SUB     ESI,4    // поиск байта-отличия в DWORD
       SUB     EDI,4
       MOV     EDX,4
@@1:    MOV     ECX,EDX  // сравнение в хвосте
       REPE    CMPSB
       JE      @@5      // все BYTE равны
       MOVZX   EAX,BYTE PTR [ESI-1]  // вычисление разницы байт
       MOVZX   EDX,BYTE PTR [EDI-1]
       SUB     EAX,EDX
@@5:    POP     EDI
       POP     ESI
end;


Пример использования

i := AW_CompareMem(@s1[1],@s2[1],Min(Length(s1),Length(s2)));


KLAUS   (2006-05-20 18:40:00) [2]

THANKS вообще в самую точку!!!


Glex   (2006-05-20 14:19:00) [3]


function CompareStr(const s1, s2: string): boolean;
var i, N: integer;
begin
N := Min(length(s1), length(s2));
result:=true;
for i:=1 to Min do begin
 if s1[i]<>s2[i] then begin
   result:=false;
   exit;
   end;
 end;
if length(s1)<>length(s2) then result:=false;
end;


Это что ли? =))


Наверх

Титульная страница Поиск, карта сайта Написать письмо