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

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

CompareStr vs StrComp


Seldoff ©   (2007-07-05 17:00:00) 

почему код CompareStr и StrComp отличается? я не силён в ассемблере, но по-моему код отличается не в плане отличий AnsiString от PChar (которые судя по _LStrToPChar минимальны), а в плане алгоритма сравнения. зачем две функции для одной задачи? и, главное, будут ли их результаты одинаковыми для любых входных строк?

может кто-нибудь, знающий ассемблер, переведёт их код на паскаль чтобы сравнить поведение?


clickmaker   (2007-07-06 15:10:00) [1]


> почему StrComp взяли из FastCode, a CompareStr нет

чтобы могли почувствовать разницу?


Seldoff   (2007-07-06 13:24:00) [2]


> REA   (06.07.07 10:08) [7]
> В BDS задействовали алгоритмы FastCode

угу, мне интересно, почему StrComp взяли из FastCode, a CompareStr нет, хотя она тоже есть в FastCode.


REA   (2007-07-06 10:08:00) [3]

В BDS задействовали алгоритмы FastCode


Сергей М.   (2007-07-06 08:11:00) [4]


> Seldoff   (05.07.07 18:53) [3]



> поправьте если я не прав


Прав, все так и есть на самом деле.

Ну а раз AnsiString содержит служебные поля, то CompareStr использует их для ускорения сравнения в ряде ситуаций с содержимым сравниваемых строк.


Seldoff   (2007-07-05 19:28:00) [5]

кстати, я говорил о BDS2006, сейчас посмотрел D7 - реализация StrComp отличается. в BDS2006 она более "хитрая".


Seldoff   (2007-07-05 18:55:00) [6]

в общем если бы я знал ассемблер я бы сам разобрался в отличиях работы, но т.к. я его не знаю :( приходится строить предположения. может кто-нибудь всё-таки переведёт на паскаль?


Seldoff   (2007-07-05 18:53:00) [7]


> > код отличается не в плане отличий AnsiString от PChar
> Именно в этом плане и все принципиальные отличия между алгоритмами
> этих функций.

а в чём собственно отличие AnsiString и PChar?
AnsiString - ссылка на массив байт (символов) после которых стоит #0. по отрицательному смещению ещё есть 4 байта счётчика ссылок и 4 байта поля длины.
PChar - ссылка массив байт (символов) после которых стоит #0.
поправьте если я не прав. ну ещё конечно же компилятор сам выделяет\освобождает память для AnsiString, а для PChar нет, но в данном случае это некритично.


> Вот более серьезное различиеStrComp - Note: When working
> with International characters, use AnsiStrComp instead.CompareStr
> - The compare operation is based on the 8-bit ordinal value
> of each character and is not affected by the current locale.
>

и где отличие? CompareStr использует просто код символа для сравнения. StrComp тоже (судя по тому что есть AnsiStrComp, которая учитывает локаль).


Anatoly Podgoretsky   (2007-07-05 18:33:00) [8]

> Сергей М.  (05.07.2007 17:20:01)  [1]

Вот более серьезное различие

StrComp - Note: When working with International characters, use AnsiStrComp instead.

CompareStr - The compare operation is based on the 8-bit ordinal value of each character and is not affected by the current locale.


Сергей М.   (2007-07-05 17:20:00) [9]


> код отличается не в плане отличий AnsiString от PChar


Именно в этом плане и все принципиальные отличия между алгоритмами этих функций.


Наверх

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