Урок 17 Задача 5
Primary tabs
Пользователь вводит строку символов, в которой есть два числа, разделенные другими символами, т.е. строка имеет вид:
какиетосимволыЧИСЛО1какиетосимволыЧИСЛО2какиетосимволынеобходимо считать данные числа в две строковые переменные s1 и s2.
var
s, s1, s2: string;
i, // счетчик, общий для внешнего и вложенного циклов
j: integer; // счетчик для смены строк
begin
write ('Введите строку: ');
readln(s);
i:= 0;
j:= 0;
s1:= '';
s2:= '';
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 > 2 then
break
else
for i:= i to length(s) do
if not ((s[i]>='0')and(s[i]<='9')) then // если встретилось "не число"
break // выходим из вложенного цикла
else begin
if j = 1 then
s1:= s1 + s[i]
else
s2:= s2 + s[i];
end;
end;
end;
writeln (s1);
writeln (s2);
readln();
end. Вывод в консоли:
Введите строку: dfhhgf35653dhhdf5653fdhf 35653 5653
- Log in to post comments
- 1050 reads
Patrick
Mon, 01/02/2023 - 11:57
Permalink
Вложенный while, но есть дублирование кода (i:= i+1)
var s, s1, s2: string; i, // счетчик, общий для внешнего и вложенного циклов j: integer; // счетчик для смены строк begin write ('Введите строку: '); readln(s); i:= 0; j:= 0; s1:= ''; s2:= ''; 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 > 2 then break else while (s[i]>='0')and(s[i]<='9') do // цикл работает, пока непрерывно идет числовой фрагмент begin if j = 1 then s1:= s1 + s[i] else s2:= s2 + s[i]; i:= i+1; // увеличиваем счетчик (общий с внешним циклом) end; end; end; writeln (s1); writeln (s2); readln(); end.Вывод в консоли:
vedro-compota
Mon, 01/02/2023 - 17:11
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)