![]() |
![]() ![]() ![]() ![]() |
|
Поиск подстроки в строке с заданной позицииDelphi , Синтаксис , Текст и Строки
Автор: Romkin
{ **** UBPFD *********** by delphibase.endimus.com ****
>>
S - строка, в которой искать
SubStr - образец
fromPos - с какой позиции
Все на асемблере, принцип простой - ищется первый символ, затем часть строки
сравнивается с образцом начиная с этого символа
Если образец не найден, возвращает 0
Если найден - номер первого символа вхождения
Зависимости: Нету их!
Автор: Romkin, romkin@pochtamt.ru, Москва
Copyright: Модернизированная функция из SysUtils
Дата: 18 июля 2002 г.
***************************************************** }
function TailPos(const S, SubStr: AnsiString; fromPos: integer): integer;
asm
PUSH EDI
PUSH ESI
PUSH EBX
PUSH EAX
OR EAX,EAX
JE @@2
OR EDX,EDX
JE @@2
DEC ECX
JS @@2
MOV EBX,[EAX-4]
SUB EBX,ECX
JLE @@2
SUB EBX,[EDX-4]
JL @@2
INC EBX
ADD EAX,ECX
MOV ECX,EBX
MOV EBX,[EDX-4]
DEC EBX
MOV EDI,EAX
@@1: MOV ESI,EDX
LODSB
REPNE SCASB
JNE @@2
MOV EAX,ECX
PUSH EDI
MOV ECX,EBX
REPE CMPSB
POP EDI
MOV ECX,EAX
JNE @@1
LEA EAX,[EDI-1]
POP EDX
SUB EAX,EDX
INC EAX
JMP @@3
@@2: POP EAX
XOR EAX,EAX
@@3: POP EBX
POP ESI
POP EDI
end;
Перевод контента на русский язык: Дана функция
Функция возвращает целочисленное значение, представляющее собой позицию первого вхождения подстроки в исходную строку, или 0, если подстрока не найдена. Вот разбивка кода:
Пример использования: В этом примере функция Обратите внимание, что предоставленный код - это реализация Delphi ассемблерного языка и может не быть совместимым с другими программными языками или средами. В статье описана функция TailPos, которая ищет подстроку в строке с заданной позиции на ассемблере. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш :: Главная :: Текст и Строки ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||