Дан массив строк. Найти наибольшее количество цифр, идущих в нем подряд - Turbo Pascal
Формулировка задачи:
В общем, есть массив строк, вводимый вручную, есть идеи как сделать поиск по всему массиву, а не по одной строке?
Например, у приведенного ниже кода такое:
Vvedite kolichestvo strok
2
Vvedite stroku nomer 1
ohj33333
Vvedite stroku nomer 2
111thhgh
выводит
5 cifri
Надо, чтобы выводило не 5, а 8. Как посчитать оставшиеся и идущие следующими единицы после троек?
Есть идеи как заменить длину строки на что-то другое? В мыслях было объединить строки и посчитать у итоговой строки, но не могу найти объединение нескольких строк, конечное число которых неизвестно (цикл).
Работает как надо, ввод реализован до двойного нажатия Enter, чем не строки? Считает как надо!
В строчках:
itfgogh555
777yjhyujhu
скажет, что подряд идет 6 цифр.
Есть что упростить здесь? Код дико нубский, надо бы в более красивый чтоли вид привести... Ну же, народ, я же не прошу с нуля написать программу и всё за меня сделать, как это делают многие, сам стараюсь, как видите, хоть и не очень умело.
Листинг программы
- var
- s:array [1..50] of string;
- p,n:integer;
- max:integer;
- i,j:integer;
- k:array [1..100] of integer;
- begin
- p:=1;
- writeln('Vvedite kolichestvo strok');
- readln(n);
- for i:=1 to n do begin
- writeln('Vvedite stroku nomer ',i);
- readln(s[i]);
- end;
- writeln;
- for i:=1 to n do begin
- for j:=1 to length(s[i]) do begin
- if ((s[i][j]='1') or (s[i][j]='2') or
- (s[i][j]='3') or (s[i][j]='4') or
- (s[i][j]='5') or (s[i][j]='6') or
- (s[i][j]='7') or (s[i][j]='8') or
- (s[i][j]='9') or (s[i][j]='0')) then
- k[p]:=k[p]+1 else p:=p+1;
- end;
- p:=p+1;
- end;
- max:=k[1];
- for i:=2 to p do if k[i]>max then max:=k[i];
- writeln(max,' cifri');
- writeln;
- readln;
- end.
Листинг программы
- for j:=1 to length(s[i]) do begin
Кажется, получилось:
Листинг программы
- var max,tmp,i,j:integer;
- s:array [1..150] of string;
- begin
- writeln('Введите массив строк: ');
- for i:=1 to 150 do begin
- readln(s[i]);
- If s[i] = '' Then break;
- end;
- max:=0; tmp:=0;
- for i:=1 to 150 do begin
- for j:=1 to length(s[i]) do begin
- if s[i][j] in ['0'..'9'] then inc(tmp)
- else if tmp>=max then
- begin
- max:=tmp; tmp:=0;
- end else tmp:=0;
- end;
- end;
- writeln('Самая большая последовательность цифр: ',max);
- readln;
- end.
Решение задачи: «Дан массив строк. Найти наибольшее количество цифр, идущих в нем подряд»
textual
Листинг программы
- var
- s: String;
- i, m, t: Integer;
- begin
- repeat
- ReadLn(s); if s='' then Break;
- for i:=1 to Length(s) do
- if s[i] in ['0'..'9'] then Inc(t)
- else begin
- if m<t then m:=t;
- t:=0;
- end;
- until False;
- WriteLn('Самая длинная последовательность цифр: ',m);
- end.
Объяснение кода листинга программы
- Переменная
s
объявлена как строка (String
). - Переменные
i
,m
иt
объявлены как целые числа (Integer
). - В цикле
repeat
считывается строка с помощью функцииReadLn(s)
. Если строка пустая, то цикл прерывается с помощью оператораBreak
. - В цикле
for
перебираются все символы строкиs
. - Проверяется, является ли текущий символ цифрой от 0 до 9 с помощью условия
s[i] in ['0'..'9']
. Если да, то переменнаяt
увеличивается на 1. - Если предыдущий символ не был цифрой, то проверяется, была ли предыдущая последовательность из цифр самой длинной с помощью условий
if m<t then m:=t; t:=0;
. Если да, то переменнаяm
обновляется, чтобы хранить самую длинную последовательность цифр. - После завершения цикла
for
переменнаяt
обнуляется, чтобы начать поиск новой последовательности цифр. - В конце программы выводится сообщение с помощью функции
WriteLn()
, содержащее самую длинную последовательность цифр, найденную в строке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д