16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:文字変数の比較を簡単に"
この発言は #00934 昨日の猿 さんの文字変数の比較を簡単に に対するコメントです
この発言に対し以下のコメントが寄せられています
#00936 kiima さん RE^2:文字変数の比較を簡単に
昨日の猿さん、こんにちは。
>> [Q]文字変数 ch が英数字であるかどうかを判断する論理式を作れ。
これは
[Q]文字変数 ch が英数字であるかどうかを返す関数を作れ。
とした方が汎用性が...。
program test;
function func1(ch : char):boolean;
begin
func1 := (('0' <= ch) and (ch <= '9')) or
(('A' <= ch) and (ch <= 'Z')) or
(('a' <= ch) and (ch <= 'z'))
end;
function func2(ch : char):boolean;
begin
func2 := ch in ['0'..'9', 'A'..'Z', 'a'..'z'];
end;
function func3(ch : char):boolean;
begin
case ch of
'0'..'9', 'A'..'Z', 'a'..'z': func3 := true;
else func3 := false;
end;
end;
var
i : integer;
c : char;
begin
for i := 1 to 10000 do begin
c := chr(random(256));
if func1(c) then;
end;
for i := 1 to 10000 do begin
c := chr(random(256));
if func2(c) then;
end;
for i := 1 to 10000 do begin
c := chr(random(256));
if func3(c) then;
end;
end.
私の趣味としては func2 := ch in ['0'..'9', 'A'..'Z', 'a'..'z'];
が好きなのですが、上のプログラムを Turbo Pascal でコンパイルして
profilerに掛けてみると、
Address Length Head Name % Called Time (ms) microSec
============ ==== == =============== ===== ======== ============ ==============
*******:**** **** ** RTR 0.00 1 0.055 54.59
TEST: 0008 0076 55 FUNC1 16.81 10000 695.726 69.57
TEST: 007E 0037 55 FUNC2 17.60 10000 728.471 72.85
TEST: 00B5 003C 55 FUNC3 15.02 10000 621.613 62.16
TEST: 00F1 0098 9A @ 50.58 1 2093.595 2093595.25
-------------------------------------------------------------------------------
total 00181(385) 4 100.00 30002 4139.460 137.97
func3 が一番速いという結果になりました。Delphiではどうでしょうね。
Delphi 用の profiler をお持ちの方がいたら試してみていただきたい。
ひの
Original document by ひの 氏 ID:(GFD03044)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|