Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

Проверка стринги   Найти похожие ветки 

 
Кастуся   (2004-07-05 22:26) [0]

Мастаки! Нужно быстро проверить, состоит ли 32-х символьная строка из ["0".."9","A".."F"]! Плиз, хелп!


 
Rouse_ ©   (2004-07-05 22:38) [1]

function A(const S: String[32]): boolean;
var
 I: Byte;
begin
 Result := True;
 for I := 1 to 32 do
   if not (S[I] in ["0".."9","A".."F"]) then
   begin
     Result := False;
     Exit;
   end;
end;


:)


 
3APA3A   (2004-07-05 23:19) [2]

Мне кажется такой вариант пошустрее будет... Хотя до тестирования руки не дошли...
 
  {$B-}
  function B(const Str : string[32]) : boolean;
  var i : Integer;
      code : Byte;
  begin
    Result := True;
    for  i := 1 to 32 do
      begin
        code := ord(Str[i]);
        if (code = 0) or (code = 1) and ...  then
          begin
            Result := False;
            Exit;
          end;
      end;
  end;
 


 
KilkennyCat ©   (2004-07-06 01:25) [3]

Шустрее будет, если просто проверять положение ord(S[i]) между ord("0") и ord("9"), а также между ord("A") и ord("F")


 
Palladin ©   (2004-07-06 01:29) [4]

:)
StrToInt("$"+s);


 
KilkennyCat ©   (2004-07-06 01:34) [5]


> Palladin ©   (06.07.04 01:29) [4]


блин... когда я начну видеть очевидное? :))


 
Кастуся   (2004-07-06 19:09) [6]


> Palladin ©   (06.07.04 01:29) [4]
> :)
> StrToInt("$"+s);

медленно


> Rouse_ ©   (05.07.04 22:38) [1]
> function A(const S: String[32]): boolean;
> var
>  I: Byte;
> begin
>  Result := True;
>  for I := 1 to 32 do
>    if not (S[I] in ["0".."9","A".."F"]) then
>    begin
>      Result := False;
>      Exit;
>    end;
> end;

тоже медленно

фишка такая: в большинстве случаев строка состоит из этих символов, изредка встречается такое, что 1 или 2 символа не "те"


 
jack128 ©   (2004-07-06 19:14) [7]


> Шустрее будет, если просто проверять положение ord(S[i])
> между ord("0") и ord("9"), а также между ord("A") и ord("F")
а это тоже медленно?


 
Palladin ©   (2004-07-06 21:11) [8]


> [6] Кастуся   (06.07.04 19:09)

Как эти строки получаются?


 
3APA3A   (2004-07-06 21:19) [9]

to Palladin
 Хм... а если строчная a,b,c,d,e,f попадется... ведь тоже преобразуется...


 
Palladin ©   (2004-07-06 21:35) [10]

Дело в том что любой вариант автора не устраивает... хотя разница между ними миллисекунды... этож сколько миллиардов строк присутствует, что бы ощутимо было? выход один... просто не допускать такие строки при формировании... отсюда и вопрос... откуда они вообще взялись?


 
Rouse_ ©   (2004-07-06 21:46) [11]

Ну тогда GUIDToString :)


 
Rouse_ ©   (2004-07-06 21:52) [12]

Опс...
Тут же обратка...

Я вот тут думаю... быстрее.
А какой критерий данного быстрее?
Перед проверкой держи на готове пул потоков размерностью 32 и делай им Resume с передачей Char из контролькой строки. При наличии нескольких процессоров можно еще и потоки по ним разветвлить :)


 
evvcom ©   (2004-07-06 21:57) [13]

Если все это медленно, то писать надо на ассемблере с оптимизацией под конкретный процессор! :)


 
Anatoly Podgoretsky ©   (2004-07-06 22:18) [14]

А это уже по второму кругу идет обсуждение, и в первом круге дали даже готовые решения, но видно без толку.


 
Кастуся   (2004-07-06 23:58) [15]


> Anatoly Podgoretsky ©   (06.07.04 22:18) [14]
> А это уже по второму кругу идет обсуждение, и в первом круге
> дали даже готовые решения, но видно без толку.

нормальных ответов не было.


 
Palladin ©   (2004-07-07 00:02) [16]

Удалено модератором
Примечание: LMD Lock :)


 
jack128 ©   (2004-07-07 00:14) [17]


> Удалено модератором
> Примечание: LMD Lock :)
:-) Супер!!!! :-)


 
KilkennyCat ©   (2004-07-07 00:44) [18]


> Кастуся   (06.07.04 23:58) [15]


Нормальный был у Паладина. Могу дать ненормальный, надо? :) Пожалуйста:
Мы знаем, что в строке всего 32 символа, и знаем, какие они млгут быть. Соответственно, мы можем получить одномерный массив 32-ух байтных чисел, содеражащий в себе все варианты такой строки. Вся проверка сведется к проверке принадлежности нашей строки к этому массиву. Большой плюс этого решения - солидность программы (заказчики любят многометровость....)


 
SergP ©   (2004-07-07 04:56) [19]


> 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;

но даже если это и будет немножко быстрее чем остальное, все равно разницы не будет заметно... :(((


 
Fay ©   (2004-07-07 09:17) [20]

2Кастуся   (06.07.04 23:58) [15]
Можешь обосновать? Нет, пожалуй.


 
Кастуся   (2004-07-07 21:56) [21]

ладно. по второму кругу, так по второму. закрываем...


 
Amoeba ©   (2004-07-08 11:55) [22]


> Кастуся   (07.07.04 21:56) [21]

Нужно было закрывать уже после первых пяти постов.


 
Anatoly Podgoretsky ©   (2004-07-08 12:05) [23]

Amoeba ©   (08.07.04 11:55) [22]
Ты щедрый


 
Romkin ©   (2004-07-08 12:06) [24]

Кастуся  (06.07.04 23:58) [15] Нормальных ответов не было?
Да я тебе даже конечный автомат нарисовал...
Вопросов вот нормальных не было


 
Кастуся   (2004-07-08 18:25) [25]


> Romkin ©   (08.07.04 12:06) [24]
> Кастуся  (06.07.04 23:58) [15] Нормальных ответов не было?
>
> Да я тебе даже конечный автомат нарисовал...
> Вопросов вот нормальных не было

все это было про обработку стринги и конкретно, сабж был по удалению пробелов.


 
Romkin ©   (2004-07-08 18:37) [26]

Туда же легко вмещается и сабж. Так что я просто удивлен, что этот вопрос снова возник


 
KilkennyCat ©   (2004-07-08 21:13) [27]


> Romkin ©   (08.07.04 18:37) [26]


не было в сабже про пробелы! :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.033 c
3-1088626960
zokzok
2004-07-01 00:22
2004.07.25
Убывающий индекс


3-1088827535
Gamar
2004-07-03 08:05
2004.07.25
Как пролистать DataSource.DataSet в качестве поля компонента?


6-1085369766
maDByte
2004-05-24 07:36
2004.07.25
Проверка состояния HTTP и FTP серверов


14-1088762602
Snip
2004-07-02 14:03
2004.07.25
Облом с интернетом


4-1087154940
DjOne
2004-06-13 23:29
2004.07.25
Tabs





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский