![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка стринги [D5, Win95/98]
Кастуся © (2004-07-05 22:26:00)Мастаки! Нужно быстро проверить, состоит ли 32-х символьная строка из ['0'..'9','A'..'F']! Плиз, хелп!
KilkennyCat (2004-07-08 21:13:00) [1]
> Romkin © (08.07.04 18:37) [26]
не было в сабже про пробелы! :)
Romkin (2004-07-08 18:37:00) [2]Туда же легко вмещается и сабж. Так что я просто удивлен, что этот вопрос снова возник
Кастуся (2004-07-08 18:25:00) [3]
> Romkin © (08.07.04 12:06) [24]
> Кастуся (06.07.04 23:58) [15] Нормальных ответов не было?
>
> Да я тебе даже конечный автомат нарисовал...
> Вопросов вот нормальных не было
все это было про обработку стринги и конкретно, сабж был по удалению пробелов.
Romkin (2004-07-08 12:06:00) [4]Кастуся (06.07.04 23:58) [15] Нормальных ответов не было?
Да я тебе даже конечный автомат нарисовал...
Вопросов вот нормальных не было
Anatoly Podgoretsky (2004-07-08 12:05:00) [5]Amoeba © (08.07.04 11:55) [22]
Ты щедрый
Amoeba (2004-07-08 11:55:00) [6]
> Кастуся (07.07.04 21:56) [21]
Нужнобыло закрывать уже послепервых пятипостов.
Кастуся (2004-07-07 21:56:00) [7]ладно. по второму кругу, так по второму. закрываем...
Fay (2004-07-07 09:17:00) [8]2Кастуся (06.07.04 23:58) [15]
Можешь обосновать? Нет, пожалуй.
SergP (2004-07-07 04:56:00) [9]
> KilkennyCat © (07.07.04 00:44) [18]
Ого... А время поиска по массиву?
2 Кастуся
Разве что проверять в цикле таким образом:
function A(const S: String[32]): boolean;
var
i,x: Byte;
begin
Result := True;
for I := 1 to 32 do
X:=ord(s[i]);
if ((x xor 48)>9) and (((x-65) and 223)>5) then
begin
Result := False;
Exit;
end;
end;
но даже если это и будет немножко быстрее чем остальное, все равно разницы не будет заметно... :(((
KilkennyCat (2004-07-07 00:44:00) [10]
> Кастуся (06.07.04 23:58) [15]
Нормальный был у Паладина. Могу дать ненормальный, надо? :) Пожалуйста:
Мы знаем, что в строке всего 32 символа, и знаем, какие они млгут быть. Соответственно, мы можем получить одномерный массив 32-ух байтных чисел, содеражащий в себе все варианты такой строки. Вся проверка сведется к проверке принадлежности нашей строки к этому массиву. Большой плюс этого решения - солидность программы (заказчики любят многометровость....)
jack128 (2004-07-07 00:14:00) [11]
> Удалено модератором
> Примечание: LMD Lock :)
:-) Супер!!!! :-)
Palladin (2004-07-07 00:02:00) [12]Удалено модератором
Примечание: LMD Lock :)
Кастуся (2004-07-06 23:58:00) [13]
> Anatoly Podgoretsky © (06.07.04 22:18) [14]
> А это уже по второму кругу идет обсуждение, и в первом круге
> дали даже готовые решения, но видно без толку.
нормальных ответов не было.
Anatoly Podgoretsky (2004-07-06 22:18:00) [14]А это уже по второму кругу идет обсуждение, и в первом круге дали даже готовые решения, но видно без толку.
evvcom (2004-07-06 21:57:00) [15]Если все это медленно, то писать надо на ассемблере с оптимизацией под конкретный процессор! :)
Rouse_ (2004-07-06 21:52:00) [16]Опс...
Тут же обратка...
Я вот тут думаю... быстрее.
А какой критерий данного быстрее?
Перед проверкой держи на готове пул потоков размерностью 32 и делай им Resume с передачей Char из контролькой строки. При наличии нескольких процессоров можно еще и потоки по ним разветвлить :)
Rouse_ (2004-07-06 21:46:00) [17]Ну тогда GUIDToString :)
Palladin (2004-07-06 21:35:00) [18]Дело в том что любой вариант автора не устраивает... хотя разница между ними миллисекунды... этож сколько миллиардов строк присутствует, что бы ощутимо было? выход один... просто не допускать такие строки при формировании... отсюда и вопрос... откуда они вообще взялись?
3APA3A (2004-07-06 21:19:00) [19]to Palladin
Хм... а если строчная a,b,c,d,e,f попадется... ведь тоже преобразуется...
Palladin (2004-07-06 21:11:00) [20]
> [6] Кастуся (06.07.04 19:09)
Как эти строки получаются?