集合的问题(100分)

  • 主题发起人 主题发起人 zhangwh
  • 开始时间 开始时间
Z

zhangwh

Unregistered / Unconfirmed
GUEST, unregistred user!
声明一个集合类型
type
letters:set of 'A'..'Z';

const
myletters:letters=['A','B']

程序中做以下判断

'a' in myletters 竟然为true
但是把'A'..'Z'改为char则为false

不知什么原因,按理说2个都是应该为false
'A'..'Z'只是char的子集啊
 
我用的是delphi5版本的,升过级,操作系统是win2000中文
 
是否不区分大小写?
 
不光'a'可以,'b'也可以。
我估计是delphi的范围检查出了问题
因为
type
letters=set of 'A'..'Z';

const
myletters:letters=['a'..'b'];
也能编译通过,可我这样检查的时候不会出问题阿
procedure TForm1.Button1Click(Sender: TObject);
var
i : byte;
begin
for i:=0 to 255 do begin

if (chr(i) in myletters) then Caption := Caption+''+IntTostr(i)+chr(i);
end;

执行的结果是65A66B
 
建议你用char绝对没问题,可以区分大小写!
'a' in myletters 竟然为true 正是因为集合没有大小写范围检查的结果!
 

有一点可以肯定
'a' in ['A'..'Z'] 或 'A' in ['a'..'z']永远是错的
'A' in ['A'..'Z'] 或 'a' in ['a'..'z'] 永远是对的

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部