![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CompareMem?
Dema-X © (2004-11-17 19:56:00)Почему не отрабатывает как нужно ?
procedure TForm1.Button1Click(Sender: TObject);
var
s1,s2:string;
res:Boolean;
ss1:Integer;
begin
Edit1.Text:='ABCD' ;
Edit2.Text:='ABCD';
s1:=Edit1.Text;
s2:=Edit2.Text;
res:=CompareMem(@s1,@s2,length(s1)-1);
if res then ShowMessage('OK') else ShowMessage('Cancel')
end;
текст одинаковый а CompareMem выдает что нет
Palladin (2004-11-22 23:29:00) [21]
> 17] Dema-X (22.11.04 06:18)
У меня под 2-4 милионна строк крутится и что?
Пример простой QuickSort есть в %Delphi%\Demos\Threads
Это первое. Второе: Лучше сразу сортировать на входе в массив, искать нужное для строки место.
> Сказал слово и замолк как рыба,что за отношение к людям
> ё-моё :(
Не борзей. Сам появился через два дня.
jack128 (2004-11-22 23:01:00) [22]на алголисте, наверно, десяток алгоритмов сортировки описано...
Dema-X (2004-11-22 19:02:00) [23]
> Palladin © (20.11.04 12:46) [16]
> Сортировка и поиск, ключевые слова.
Сказал слово и замолк как рыба,что за отношение к людям ё-моё :(
Dema-X (2004-11-22 16:32:00) [24]
> Palladin © (20.11.04 12:46) [16]
> Сортировка и поиск, ключевые слова.
а как её осущесвить?
Dema-X (2004-11-22 06:18:00) [25]Сортировка такого массива занимет не меньше места,сам подсчитай если размер файла около 100мегабайт
Palladin (2004-11-20 12:46:00) [26]Сортировка и поиск, ключевые слова.
Dema-X (2004-11-20 12:24:00) [27]удалить из массива строк повтроряющиеся сообщения,в данном случае удалить одинаковые обьявления из всех обьявлений в газете или архиве газет за разные месяцы
Palladin (2004-11-19 15:26:00) [28]Чем вызвана эта необходимость прогонки?
Defunct (2004-11-19 15:15:00) [29]Dema-X (19.11.04 10:42) [12]
что вы напишете =, что CompareMem все равно как минимум 1Млн байт придется сравнить. Как минимум 1 млн раз придется вызвать функцию сравнения. IMHO "=" быстрее всего.
Dema-X (2004-11-19 10:42:00) [30]просто у меня стоит необходимость прогонки строки по массиву из более чем 1МЛН а сравнений типа = медленно а как можно по быстрому сравнивать
Anatoly Podgoretsky (2004-11-18 19:21:00) [31]Dema-X (18.11.04 19:08) [10]
В общем случае c1=c2
Dema-X (2004-11-18 19:08:00) [32]А кстати что будет быстрее работать сравнение тика if с1=с2 или эти функции&\?
Dema-X (2004-11-18 19:07:00) [33]
> Юрий Зотов © (17.11.04 20:57) [5]
> Длинная строка - это указатель
Извиняюсь,не сразу просёк :)
Dema-X (2004-11-18 18:53:00) [34]а при чем здесь s1 у меня стоит @s1 что есть указатель то есть поинтер а
> Юрий Зотов © (17.11.04 20:59) [6]
> Сорри, Length(S1), конечно. "Минус единица" - убрать.
это я так пробовал думал может есть какой знак в конце не нужный
Defunct (2004-11-17 21:38:00) [35]Res := S1 = S2;
Юрий Зотов (2004-11-17 20:59:00) [36]Сорри, Length(S1), конечно. "Минус единица" - убрать.
Юрий Зотов (2004-11-17 20:57:00) [37]> Dema-X
Длинная строка - это указатель. Вы сравниваете адреса, а не тела строк.
Res := CompareMem(@S1 [1], @S2 [1], Length(S1) - 1);
wnew (2004-11-17 20:25:00) [38]StrIComp
StrComp
StrLComp
StrLIComp
CompareStr
AnsiCompareStr
begin...end (2004-11-17 20:13:00) [39]
> Dema-X (17.11.04 19:56)
Кстати, тебя тот факт, что SizeOf(s1) = 4, даже если s1 = 'ABCDEFG', ни на какие мысли не наводит?
begin...end (2004-11-17 20:11:00) [40]Ну и правильно, указатели s1 и s2 не равны.