![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Незнаю как сделать!!!! [D6, Win95/98]
Andy BitOff © (2002-07-04 19:24:00)Как правильно оформить условие типа:
если srt[i] неравно "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F" то ...
MARcoDEN (2002-07-14 10:54:00) [1]if not (s[i] in ["a".."z", "A".."Z", "0".."9", "_", "-", "."]) then ...
Юрий Зотов (2002-07-13 23:36:00) [2]Это было очевидно. Операции с множествами - это побитовые логические операции, одна из самых быстрых вещей. А операции со строками - наоборот, одна из самых медленных. Тем более, что Pos реализует, наверное, самый медленный из известных алгоритмов поиска подстрок - простую посимвольную проверку со сдвигом.
TTCustomDelphiMaster (2002-07-13 23:23:00) [3]А Юрий Зотов оказался прав
const
HexDigits = ["0".."9", "a".."h", "A".."H"];
var
st,en, en1: tdatetime;
i: integer;
begin
st := now();
for i := 1 to 10000000 do
if pos("H","0123456789abcdefghABCDEFGH") = 0 then
begin
end;
en := now();
for i := 1 to 10000000 do
if not ("H" in HexDigits) then
begin
end;
en1 := now();
Edit1.Text := formatdatetime(""AlexanderVasjuk " ss:zzz", en-st)+" - "+
formatdatetime(""Юрий Зотов " ss:zzz", en1-en);
end;
AlexanderVasjuk 04:450 - Юрий Зотов 00:050
Ну тчож признаю Юрий Зотов он и в Африке Юрий Зотов. Молодец!!!
Юрий Зотов (2002-07-13 22:32:00) [4]> TTCustomDelphiMaster © (13.07.02 21:59)
Нет. Использование строк для данной задачи ОЧЕНЬ неоптимально, а Pos вообще довольно медленная штука. Использование множества-константы и IN сработает, как минимум, на порядок быстрее, а по простоте кода - то же самое.
TTCustomDelphiMaster (2002-07-13 21:59:00) [5]Помоему AlexanderVasjuk © (10.07.02 09:55) сделал просто и гениально. Улучшать уже нечего.
bander_log (2002-07-13 20:53:00) [6]Можно сделать просто через массивы:
сначала объяви массивы по группам например
const
LettersRus: set of Char = ["А".."я"];
LettersEng: set of Char = ["A".."z"];
LettersDigit: set of Char = ["0".."9"];
а потом условия вхождения или невхождения в массив:
//------- вхождение -----------
if Data[i] in LettersDigit then
begin
// операции
end;
//------- не вхождение -----------
if Data[i] not in LettersDigit then
begin
// операции
end;
если нужно совместное через and
if (Data[i] not in LettersDigit) and (Data[i] not in LettersLettersRus) then
begin
// операции
end;
Попробуй ...
AlexanderVasjuk (2002-07-10 09:55:00) [7]if pos(srt[i], "0123456789abcdefghABCDEFGH") = 0 then
Work_LEON (2002-07-10 09:00:00) [8]Volj +
if not (srt[i] in ["0".."Z"])
, или так:
if not (srt[i] in ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"])
:)
Юрий Зотов (2002-07-04 19:35:00) [9]const
HexDigits = ["0".."9", "a".."f", "A".."F"];
...
if not (Str[i] in HexDigits) then ...
Volj (2002-07-04 19:31:00) [10]
if not (srt[i] in ["0".."Z"]) ...
если в ряду нет перерывов
SkyQuake (2002-07-04 19:28:00) [11]Тебе надо определить неравно всем одновременно или дной из них?