Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];

Вниз

Поиск строки в строке   Найти похожие ветки 

 
DmitrichJ   (2007-05-23 15:44) [0]

Привет, мастера=)
Подскажите есть ли функция поиска строки String в строке String?
Спасибо.


 
Просто_новичок   (2007-05-23 15:46) [1]

да, есть, это: copy


 
Просто_новичок   (2007-05-23 15:48) [2]

Пример:
Есть строка: a="Дюбители пива хотят ещё", нужно найти: b="пива", пишешь:
for i:=1 to length(a) do
if copy(a,i,length(b))=b then условие найдено.


 
Однокамушкин   (2007-05-23 15:50) [3]


> Просто_новичок   (23.05.07 15:48) [2]
> Пример:
> Есть строка: a="Дюбители пива хотят ещё", нужно найти: b="пива",
>  пишешь:
> for i:=1 to length(a) do
> if copy(a,i,length(b))=b then условие найдено.


Да, работать будет жутко долго...

Есть более приспособленные для этого функции: Pos, PosEx...


 
DmitrichJ   (2007-05-23 15:50) [4]

Генеально! Спасибо


 
DmitrichJ   (2007-05-23 15:50) [5]

Для меня скоростьимеет большой значение!


 
DmitrichJ   (2007-05-23 15:54) [6]

Можете объяснить принцип работы Pos, PosEx?


 
clickmaker ©   (2007-05-23 16:01) [7]


> [6] DmitrichJ   (23.05.07 15:54)

в исходниках ищи. Delphi\Source\


 
stone ©   (2007-05-23 16:03) [8]


> DmitrichJ   (23.05.07 15:54) [6]
> Можете объяснить принцип работы Pos, PosEx?

procedure       _Pos{ substr : ShortString; s : ShortString ) : Integer};
asm
{     ->EAX     Pointer to substr               }
{       EDX     Pointer to string               }
{     <-EAX     Position of substr in s or 0    }

       PUSH    EBX
       PUSH    ESI
       PUSH    EDI

       MOV     ESI,EAX { Point ESI to substr           }
       MOV     EDI,EDX { Point EDI to s                }

       XOR     ECX,ECX { ECX = Length(s)               }
       MOV     CL,[EDI]
       INC     EDI             { Point EDI to first char of s  }

       PUSH    EDI             { remember s position to calculate index        }

       XOR     EDX,EDX { EDX = Length(substr)          }
       MOV     DL,[ESI]
       INC     ESI             { Point ESI to first char of substr     }

       DEC     EDX             { EDX = Length(substr) - 1              }
       JS      @@fail  { < 0 ? return 0                        }
       MOV     AL,[ESI]        { AL = first char of substr             }
       INC     ESI             { Point ESI to 2"nd char of substr      }

       SUB     ECX,EDX { #positions in s to look at    }
                       { = Length(s) - Length(substr) + 1      }
       JLE     @@fail
@@loop:
       REPNE   SCASB
       JNE     @@fail
       MOV     EBX,ECX { save outer loop counter               }
       PUSH    ESI             { save outer loop substr pointer        }
       PUSH    EDI             { save outer loop s pointer             }

       MOV     ECX,EDX
       REPE    CMPSB
       POP     EDI             { restore outer loop s pointer  }
       POP     ESI             { restore outer loop substr pointer     }
       JE      @@found
       MOV     ECX,EBX { restore outer loop counter    }
       JMP     @@loop

@@fail:
       POP     EDX             { get rid of saved s pointer    }
       XOR     EAX,EAX
       JMP     @@exit

@@found:
       POP     EDX             { restore pointer to first char of s    }
       MOV     EAX,EDI { EDI points of char after match        }
       SUB     EAX,EDX { the difference is the correct index   }
@@exit:
       POP     EDI
       POP     ESI
       POP     EBX
end;


 
APiC ©   (2007-05-23 16:17) [9]

Уточни, тебе нужен принцип работы или как пользоваться Pos?


 
DmitrichJ   (2007-05-23 16:18) [10]

stone, удовлетворил самолюбия?


 
Romkin ©   (2007-05-23 16:25) [11]

Дык все подробно описано: с проверками ищется первый символ подстроки, если найден - проверяется вся подстрока. В большинстве случаев годится :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
9-1153360589
RobinBad
2006-07-20 05:56
2007.06.17
Установка Glscene


4-1168172596
algol
2007-01-07 15:23
2007.06.17
Запустить процесс, помогите кто чем может


2-1180291791
ppcumax
2007-05-27 22:49
2007.06.17
Перевод секунд в Часы:Минуты:Секунды


11-1161719636
_Ламер_
2006-10-24 23:53
2007.06.17
EditBox почернел


15-1179384718
Krants
2007-05-17 10:51
2007.06.17
ActiveX и последствия





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский