一个小问题,请各位帮帮忙,关于字符串判断的问题 (30分)

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

plf22

Unregistered / Unconfirmed
GUEST, unregistred user!
如何能判断一个字符串中的内容是数字而不是其他字符,我想避免在进行strtoint()的
转换时出错
 
var a:integer;
s:string;
try
a:=strtoint(s);
except
showmessage('It's wrong');
end;
在RAD环境中编译执行会触发错误,但运行期不会。具体可看看try ... except ... end.的帮助。
 
说得有道理,我怎么就没想到,我去试试
 
也可以一个个字符检查,
是不是大于#47小于#59。
 
to Luckm
我就是想这样干,可是怎么取这些字符的asc码
 
turecat的例子好像就是一本讲oo的书里面推荐过的方法~~~哦
 
Ord()就可以了
其实你可以用Val()函数,就可以避免异常了,需要传入一个变量用来返回错误信息(整数类型)
 
加入数字都是正数的话,可以这样:

if StrToIntDef(str, -1) < 0 then
错误

IntToStrDef 不会触发异常,如果不是数字,则返回指定的默认值。
 
你可以用
if StrToInt64Def(sBuf, -1) < 0 then
{here do something}
 
还有一个办法可以从根本上解决你的问题,判断edit中输入的字符,不是数字就清除。
procedure TForm1.Edit1KeyPress(Sender: TObject
var Key: Char);
begin
if not (key in ['0'..'9','.']) then
key:=#0;
end;
 
Function IsNum(MyStr:String):Boolean;
const
OKChar: string = '0123456789.';
var
i:integer;
begin
Result:=True;
for i:=1 to Length(MyStr) do
begin
if pos(MyStr, OKChar) = 0 then
result:=False;
end;
end;
 
多人接受答案了。
 
大搞平均主义,早晚有一天谁也不回答你的问题喽。
 
to truecat
在这个问题中,你的提议可并不怎样,我给得分也不多,你不会这么小气吧,我想要的是
shenloqi的答案
 
后退
顶部