判断一个String是否全部由数字字符构成(20分)

  • 主题发起人 主题发起人 learnlife
  • 开始时间 开始时间
L

learnlife

Unregistered / Unconfirmed
GUEST, unregistred user!
这个String长度在10以上,最长40,大家发表一下意见,有什么简洁点的写法,实现这个函数的功能
function IsValidNum(Str: string): Boolean;
begin
Result := True;
//...
end;
 
try
这里将这个字符强转成数字型
返回1,全是数字
except
返回2,不全是数字
end
 
///函有字符就返回FALSE
for i:=1 to length(str)do
if not (str in ['0'..'9']) then
begin
Result := false;
break;
end;
 
function TForm1.IsValidNum(Str: string): Boolean;
var
i, tmpValue, tmpCode: Integer;
begin
Result := True;
for i := 1 to Length(Str)do
begin
Val(Str, tmpValue, tmpCode);
if tmpCode <> 0 then
begin
Result := False;
Exit;
end;
end;
end;
 
一个字符一个字符来判断
 
function IsNumber(s: string): Boolean;
var
i: Integer;
begin
Result := False;
for i := 1 to Length(s)do
case s of
'0'..'9':;
else

Exit;
end;
Result := True;
end;
 
function IsValidNum(Str: string): Boolean;
var
i,code:integer;
begin
Val(Str, i, code);

if code=0 then
Result := True
else
Result := false
end;
 
function IsStrANumber(const S: string): Boolean;
var
P: PChar;
begin
P := PChar(S);
Result := False;
while P^ <> #0do
begin
if not (P^ in ['0'..'9']) then
Exit;
Inc(P);
end;
Result := True;
end;
 
To:myveremy
你的算法有问题.
Integer是4个字节来表示的,就是说只能表示
-2147483648..2147483647的数字
楼主的要求是10-40位数,你的算法在处理大于10位数后就永远返回False了.
 
function MyVerifyAllIsNum(S: string): boolean;
var
i: integer;
begin
for i:=1 to Length(S)do
if not (S in ['0'..'9']) then
begin
Result:= False;
Exit;
end;
Result:= True;
end;
 
采用了逐个字符判断的算法,radtek所用的指针操作也是逐个字符判断
很多人用了Val函数,StrToInt函数调用了这个
其它算法:(1)bbgsgs说的是一种,不过我的数比较长,要多考虑一下
请大家批评指正
 
后退
顶部