Главная страница
    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.041 c
1-1176884417
>>DEATH<<
2007-04-18 12:20
2007.06.17
отправка запроса


2-1180037373
Kostafey
2007-05-25 00:09
2007.06.17
Как узнать высоту панели задач и заголовка формы ?


2-1180337522
vpbar
2007-05-28 11:32
2007.06.17
Ошибка компилятора Delphi или просто особенность??


11-1162053597
Vladimir Kladov
2006-10-28 20:39
2007.06.17
Версия 2.41 (unstable, beta)


15-1179485706
Mishenka
2007-05-18 14:55
2007.06.17
Невиден компонент на палитре компонентов.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский