Урок 17 Задача 6
Primary tabs
Пользователь вводит строку произвольных символов, выделите из неё массив первых 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
- Log in to post comments
- 630 reads
Patrick
Mon, 01/02/2023 - 12:15
Permalink
Решение по видео-разбору
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
Mon, 01/02/2023 - 17:13
Permalink
проверить выход за пределы
проверить выход за пределы массива именно для проблемных входных данных
_____________
матфак вгу и остальная классика =)