Форум: "Основная";
Текущий архив: 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.036 c