case语句(50分)

  • 主题发起人 主题发起人 phil302
  • 开始时间 开始时间
P

phil302

Unregistered / Unconfirmed
GUEST, unregistred user!
小生有一个问题如何将下面的语句转为case语句
if Edit1.test:=''then
showmessage('AKAKAKAK')
else
if Edit1.Text=Edit2.Text then
showmessage('jkjkjkkjk')
else
showmessage('ghghghghghg')
 
case XX of
end;

中的XX不能是字符串
 
case Edit1.Text of
"":showmessage('AKAKAKAK');
Edit2.Text:showmessage('jkjkjkkjk');
else
showmessage('ghghghghghg');
end;
 
我记得在C++中 case后的值 只能是 数字
不知 xWolf 老兄的方法是否可行
 
case AA of
语句中的AA必须是数字呀!
如果要用字符串可以用STRTOINT(‘字符串’)转换成数字呀。
不过你必须知道转换后的数值。
比如:
a:=strtoint('AKAKAKAK')
b:=strtoint('jkjkjkjk')
c:=strtoint('')
case strtoint(Edit1.test) of
a: begin
end;
b: begin
end;
c: begin
end;
end;
行了吧。手都打肿了。可不可以给分了呀。这50分大家分了吧!
 
》case后的值 只能是 数字
同意
 
是有序类型,char , 枚举 都可以。
 
如果edit.text是数字,不妨用strtoint(editx.text)判断,
如果是事先已知的不妨将已知量定义成枚举类型定义成枚举类型
 
还是定义成枚举类型比较好
 
这是个老生常谈的问题了,如果一定要写成case形式,有如下办法:
定义一个枚举类型:
type mystrings=(strHello,strWorld,...,strXXXX);
定义一个数组:
const myarray: array [mystrings] of string=['hello','world',...'XXXX'];
根据如下函数:
function CaseString (const s: string;
const x: array of string): Integer;
var
i: Smallint;
begin
Result:= -1;
// Default return parameter
for i:= Low (x) to High (x)do
begin
if s = x then
begin
Result:= i;
Exit;
end;
end;
end;

可以写成:
case casestring('hello',myarray) of
strHello:...
strWorld:...
end;

这个方法还算比较通用(因为caseString函数算是通用的),
对于大批量需要case的string还是有价值的,如果数量少,还不如if/else

 
if than else
能解决,没必要用case语句
 
50分,不够分了
 
>>if than else
能解决,没必要用case语句
<==同意kang
能用一种语句方便地表达的,每必要再换一种。
不光是麻烦,还有可读性问题。
 
后退
顶部