如何做Case语句(100分)

  • 主题发起人 主题发起人 苍蝇拍子
  • 开始时间 开始时间

苍蝇拍子

Unregistered / Unconfirmed
GUEST, unregistred user!
我有几时个string类型的命令,比如:‘Login’,'Logout'。。。等
向用Case语句去实现。
比如 Case mycommand of
'Login' : // do something;
'Logout' : //do something;
....
...
但系统不接受这种做法,应该如何做,谢谢!
 
做一个数组,然后用查表的办法

for(i=0;i<MAXLEN;i++){
if(strcmp(data,mycommand)==0)break;
}

switch(i){
case 0://..
case 1://...
case 2://...
}
 
系统的确不支持,由于mycommand不是基本变量。
xiao.lit的方法可以一试!

 
用数组还不如使用TStringList.
 
char* string={
"Login","Logout",...
};
for(i=0;i<maxlen;i++){
if(strcmp(string,mycommand)==0) break;
}
switch(i){
case 0://...
case 1://...
}
 
>>string类型的命令
不会吧?
 
Case语句只支持有序类型,如integer,char等
 
能否给予更深提示
 
在这个问题中, 用if then else 的效率要好过Case 效率吗?
 
经过编译后
应该是一样的
 
若命令已知,可以这样:
定义…………
TOrder = (Login, LogOut, ……);

在case语句中
var
Order: TOrder;
begin
…………
case Order of
Login: …………;
LogOut: …………;
end;
…………
end;

若命令不定,可以用沈前卫的方法,由TStringList.IndexOf 方法去相应命令
的序号,然后………………
 
:OpuBF:Order: TOrder;如何给Order 赋值
 
如果这样的分支只用到一次,还是用 if elseif elseif ...
否则,沈前卫的方法不错。
 
另一解决途径,不要判断了,直接:
self.MethodAddress
然后调用即可.
 
老兄,你学过汇编没有,case 实际上是由 N 个
IF THEN
...
ELSE IF THEN
...

组成的,不支持的话就自己写就行了。
 
直接用
Order = Longin ……
就可以了!
 
:cAkk:self.methodaddress 如何用
 
MethodAddress可以从一个字符串查到以该字符串为名字的函数的地址,
查到后你直接调用该地址就可以了
 
If Name does not specify a published method for the object,
MethodAddress returns nil.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
550
import
I
后退
顶部