Вводится строка символов, в которой могут встречаться пробелы, цифры, буквы 'Е' и 'е', знаки '+' и '-'. Известно, что первый символ отличен от пробела. Из данной строки выделить подстроку символов, предшествующих первому пробелу. Требуется определить, является ли эта подстрока числом (в смысле Паскаля). Если да, то выяснить: целое или вещественное это число, положительное или отрицательное.
volvo
19.12.2004 23:11
crazysun Все очень просто - есть такая функция Pos(subst, st: string):byte, и если ее применить в виде:
Код
... p := pos(' ', s); if p > 0 then st := copy(s, 1, p-1) else st := s; ...
то в st как раз будет кусок исходной строки до первого пробела (если пробела нет, то скопируется вся строка). Дальше - дело техники (можно использовать Val, например)
crazysun
19.12.2004 23:44
thx
volvo
21.12.2004 18:09
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.