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

Рейтинг@Mail.ru

вверх гостевая; E-mail
Hosted by uCoz