Pers.narod.ru. Алгоритмы. Самая длинная подстрока, являющаяся записью числа |
Задачу можно сформулировать так: в произвольной строке найти самую длинную подстроку, являющуюся записью целого или вещественного числа (в том числе, в экспоненциальной записи).
Для решения задачи не нужно писать собственный разбор строки по спецификации вещественного числа -
достаточно типовым двойным циклом извлечь из неё все возможные подстроки, попытаться каждую из них
преобразовать в число стандартным методом Val
, и, если это удалось, сравнить длину подстроки с максимальной длиной,
хранящейся в другой переменной.
Получаем вот такую реализацию:
{$N+} const s='12.3A+1.0247899999999999999999999999999E-9999ABC3.5E12'; var s0,smax:string; l,lmax,e,i,j,n:integer; d:double; begin lmax:=0; smax:=''; n:=length(s); for i:=1 to n do for j:=i to n do begin s0:=copy(s,i,j-i+1); val (s0,d,e); if (e=0) then begin l:=length(s0); if l>lmax then begin lmax:=l; smax:=s0; end; end; end; writeln ('Smax=',smax); end.
Для большей точности здесь использованы тип double
и директива компилятора, которая его подключает.
гостевая; E-mail |