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

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

Проверка стринги [D5, Win95/98]


Страницы:   1 2

Кастуся ©   (2004-07-05 22:26:00) 

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


jack128   (2004-07-06 19:14:00) [21]


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


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


> 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 символа не "те"


KilkennyCat   (2004-07-06 01:34:00) [23]


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


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


Palladin   (2004-07-06 01:29:00) [24]

:)
StrToInt('$'+s);


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

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


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

Мне кажется такой вариант пошустрее будет... Хотя до тестирования руки не дошли...
 
  {$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;
 


Rouse_   (2004-07-05 22:38:00) [27]

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

Наверх

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