Дан массив строк. Найти наибольшее количество цифр, идущих в нем подряд - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

В общем, есть массив строк, вводимый вручную, есть идеи как сделать поиск по всему массиву, а не по одной строке? Например, у приведенного ниже кода такое: Vvedite kolichestvo strok 2 Vvedite stroku nomer 1 ohj33333 Vvedite stroku nomer 2 111thhgh выводит 5 cifri Надо, чтобы выводило не 5, а 8. Как посчитать оставшиеся и идущие следующими единицы после троек?
Листинг программы
  1. var
  2. s:array [1..50] of string;
  3. p,n:integer;
  4. max:integer;
  5. i,j:integer;
  6. k:array [1..100] of integer;
  7. begin
  8. p:=1;
  9. writeln('Vvedite kolichestvo strok');
  10. readln(n);
  11. for i:=1 to n do begin
  12. writeln('Vvedite stroku nomer ',i);
  13. readln(s[i]);
  14. end;
  15. writeln;
  16. for i:=1 to n do begin
  17. for j:=1 to length(s[i]) do begin
  18. if ((s[i][j]='1') or (s[i][j]='2') or
  19. (s[i][j]='3') or (s[i][j]='4') or
  20. (s[i][j]='5') or (s[i][j]='6') or
  21. (s[i][j]='7') or (s[i][j]='8') or
  22. (s[i][j]='9') or (s[i][j]='0')) then
  23. k[p]:=k[p]+1 else p:=p+1;
  24. end;
  25. p:=p+1;
  26. end;
  27. max:=k[1];
  28. for i:=2 to p do if k[i]>max then max:=k[i];
  29. writeln(max,' cifri');
  30. writeln;
  31. readln;
  32. end.
Листинг программы
  1. for j:=1 to length(s[i]) do begin
Есть идеи как заменить длину строки на что-то другое? В мыслях было объединить строки и посчитать у итоговой строки, но не могу найти объединение нескольких строк, конечное число которых неизвестно (цикл).
Кажется, получилось:
Листинг программы
  1. var max,tmp,i,j:integer;
  2. s:array [1..150] of string;
  3. begin
  4. writeln('Введите массив строк: ');
  5. for i:=1 to 150 do begin
  6. readln(s[i]);
  7. If s[i] = '' Then break;
  8. end;
  9. max:=0; tmp:=0;
  10. for i:=1 to 150 do begin
  11. for j:=1 to length(s[i]) do begin
  12. if s[i][j] in ['0'..'9'] then inc(tmp)
  13. else if tmp>=max then
  14. begin
  15. max:=tmp; tmp:=0;
  16. end else tmp:=0;
  17. end;
  18. end;
  19. writeln('Самая большая последовательность цифр: ',max);
  20. readln;
  21. end.
Работает как надо, ввод реализован до двойного нажатия Enter, чем не строки? Считает как надо! В строчках: itfgogh555 777yjhyujhu скажет, что подряд идет 6 цифр. Есть что упростить здесь? Код дико нубский, надо бы в более красивый чтоли вид привести... Ну же, народ, я же не прошу с нуля написать программу и всё за меня сделать, как это делают многие, сам стараюсь, как видите, хоть и не очень умело.

Решение задачи: «Дан массив строк. Найти наибольшее количество цифр, идущих в нем подряд»

textual
Листинг программы
  1. var
  2.   s: String;
  3.   i, m, t: Integer;
  4. begin
  5.   repeat
  6.     ReadLn(s); if s='' then Break;
  7.     for i:=1 to Length(s) do
  8.       if s[i] in ['0'..'9'] then Inc(t)
  9.       else begin
  10.         if m<t then m:=t;
  11.         t:=0;
  12.       end;
  13.   until False;
  14.   WriteLn('Самая длинная последовательность цифр: ',m);
  15. end.

Объяснение кода листинга программы

  1. Переменная s объявлена как строка (String).
  2. Переменные i, m и t объявлены как целые числа (Integer).
  3. В цикле repeat считывается строка с помощью функции ReadLn(s). Если строка пустая, то цикл прерывается с помощью оператора Break.
  4. В цикле for перебираются все символы строки s.
  5. Проверяется, является ли текущий символ цифрой от 0 до 9 с помощью условия s[i] in ['0'..'9']. Если да, то переменная t увеличивается на 1.
  6. Если предыдущий символ не был цифрой, то проверяется, была ли предыдущая последовательность из цифр самой длинной с помощью условий if m<t then m:=t; t:=0;. Если да, то переменная m обновляется, чтобы хранить самую длинную последовательность цифр.
  7. После завершения цикла for переменная t обнуляется, чтобы начать поиск новой последовательности цифр.
  8. В конце программы выводится сообщение с помощью функции WriteLn(), содержащее самую длинную последовательность цифр, найденную в строке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы