Урок 17 Задача 6

Урок 17 Задача 6:

Пользователь вводит строку произвольных символов, выделите из неё массив первых 8 строковых литералов, которые являются числами. И выведите эти числа на экран.

var
  s: string;
  i,                         // счетчик, общий для внешнего и вложенного циклов
  j: integer;                // счетчик элементов (строк) в массиве
  m: array [1..8] of string; // массив из восьми строк
begin
  write ('Введите строку: ');
  readln(s);
  i:= 0;
  j:= 0;
  while not (i > length(s)) do           // цикл для обхода строки
  begin
    i:= i+1;
    if (s[i]>='0')and(s[i]<='9') then    // если встретилось число
    begin
      j:= j + 1;                         // увеличиваем счетчик массива строк
      if j > high(m) then
        break
      else
        for i:= i to length(s) do        // счетчик тот же, что и во внешнем цикле
          if not ((s[i]>='0')and(s[i]<='9')) then  // если встретилось "не число"
            break                                  // выходим из вложенного цикла
          else
            m[j]:= m[j] + s[i];               // записываем символ в строку массива
    end;
  end;
  for j:=low(m) to high(m) do // обходим строковый массив для вывода строк на экран
    writeln (m[j]);
  readln();
end.

Вывод в консоли:

Введите строку: sdf23dfg43df4dfs5sdfg5sdf54sd4dsf5sd4sd43sd3
23
43
4
5
5
54
4
5

var
  s: string;
  i, j: integer;                // счетчик элементов (строк) в массиве
  m: array [1..8] of string; // массив из восьми строк
  q: boolean;
begin
  write ('Введите строку: ');
  readln(s);
  j:= 0;
  q:= false;
  for i:= 1 to length(s) do
  begin
    if (j <= high(m)) then
    begin
      if (s[i]>='0')and(s[i]<='9') then
      begin
        if not q then
          j:= j + 1;
        m[j]:= m[j] + s[i];
        q:= true;
      end else
      begin
        if q then
          q:= false;
      end;
    end else
      break;
  end;
  for j:=low(m) to high(m) do // обходим строковый массив для вывода строк на экран
    writeln (m[j]);
  readln();
end. 
vedro-compota's picture

проверить выход за пределы массива именно для проблемных входных данных

_____________
матфак вгу и остальная классика =)