Rather..
var
i: integer;
begin
i:= StrToInt(s);
if (s = '0') or (i 0) then
writeln('S is an integer, and i is now: ', i)
else
writeln('S is not an integer: ', s);
end;
Alternatively:
function IsInteger(s: string; i: integer);
begin
result:= false;
if (s = '0') or (i 0) then result:= true;
s can be 00 000 etc. as well as +0 +00 etc.
And '-0' '-00'
Army of critical programmer brains can help,
program test; {$mode objfpc} {$H+}
function IsInteger(s: string; i: integer): boolean;
var idx: integer;
begin
result:= true;
if i 0 then exit;
for idx:= 1 to length(s) do
begin
if (idx = 1) then
if (s[idx] = '-') or (s[idx] = '+') then
continue;
if (s[idx] '0') then result:= false;
end;
// could also check for invalid length..
// not sure if 0 is acceptable
end;
function StrToInt(s: string): integer;
var dummy: integer;
begin
val(s, result, dummy);
end;
var tmp: string;
IsInt: boolean;
someint: integer;
begin
tmp:= '';
someint:= StrToInt(tmp);
IsInt:= IsInteger(tmp, someint);
writeln('Should be true: ', IsInt);
tmp:= '0';
someint:= StrToInt(tmp);
IsInt:= IsInteger(tmp, someint);
writeln('Should be true: ', IsInt);
tmp:= '-';
someint:= StrToInt(tmp);
IsInt:= IsInteger(tmp, someint);
writeln('Should be true: ', IsInt);
tmp:= '+';
someint:= StrToInt(tmp);
IsInt:= IsInteger(tmp, someint);
writeln('Should be true: ', IsInt);
tmp:= '000ab';
someint:= StrToInt(tmp);
IsInt:= IsInteger(tmp, someint);
writeln('Should be false: ', IsInt);
tmp:= 'x';
someint:= StrToInt(tmp);
IsInt:= IsInteger(tmp, someint);
writeln('Should be false: ', IsInt);
tmp:= '0';
someint:= StrToInt(tmp);
IsInt:= IsInteger(tmp, someint);
writeln('Should be true: ', IsInt);
readln;
end.
What about +-+000 and ++-+0 though?
And does StrToInt in the current sysutils check this?
___
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel