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

Вниз

CompareStr vs StrComp   Найти похожие ветки 

 
Seldoff   (2007-07-05 17:00) [0]

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

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


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


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


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


 
Anatoly Podgoretsky ©   (2007-07-05 18:33) [2]

> Сергей М.  (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.


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


> > код отличается не в плане отличий 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, которая учитывает локаль).


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

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


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

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


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


> Seldoff   (05.07.07 18:53) [3]



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


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

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


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

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


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


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

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


 
clickmaker ©   (2007-07-06 15:10) [9]


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

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



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

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

Наверх





Память: 0.46 MB
Время: 0.041 c
15-1187670626
Slider007
2007-08-21 08:30
2007.09.16
С днем рождения ! 21 августа 2007 вторник


8-1165404177
T54
2006-12-06 14:22
2007.09.16
Вырезание куска из видеофайла


15-1187771820
Jeer
2007-08-22 12:37
2007.09.16
Библиотека DC


5-1160204158
xolin
2006-10-07 10:55
2007.09.16
Как заблокировать CloseUp по LButtonClick для ComboBox?


2-1187598275
DevilDevil
2007-08-20 12:24
2007.09.16
Необоснованно приходит DoubleClick. У кого-либо возникало?





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