Вводится строка символов, в которой могут встречаться пробелы, цифры, буквы 'Е' и 'е', знаки '+' и '-'. Известно, что первый символ отличен от пробела. Из данной строки выделить подстроку символов, предшествующих первому пробелу. Требуется определить, является ли эта подстрока числом (в смысле Паскаля). Если да, то выяснить: целое или вещественное это число, положительное или отрицательное.
crazysun
Все очень просто - есть такая функция Pos(subst, st: string):byte, и если ее применить в виде:
thx
crazysun
Вот программа полностью...
{$N+}
const
s: string = '+1.256723E-23 and so on...';
{ В переменной IsNegative возвращается признак того, является ли число
в строке отрицательным, IsLongInt - признак того, является ли число целым...
Внимание: Обе эти переменные содержат правильные результаты ТОЛЬКО
тогда, когда сама функция возвращает True!!! }
function isNumber(s: string;
var isNegative, isLongInt: boolean): boolean;
var
TnLong: LongInt; TnDouble: Double;
err: Integer;
begin
IsLongInt := True;
Val(s, TnLong, err);
if err <> 0 then
begin
IsLongInt := False;
Val(s, TnDouble, err);
isNumber := False;
if err <> 0 then Exit
end;
IsNegative := (s[1] = '-');
isNumber := True
end;
var
b, bNeg, bLong: boolean;
begin
b := isNumber(copy(s, 1, pred(pos(' ', s)) + 255*byte(pos(' ', s) = 0)),
bNeg, bLong);
writeln('is number: ', b);
if b then
begin
writeln('is negative: ', bNeg);
writeln('is integer: ', bLong);
end;
end.