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

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

Незнаю как сделать!!!! [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]

Тебе надо определить неравно всем одновременно или дной из них?


Наверх

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