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 и директива компилятора, которая его подключает.
|
|