Определить общее число вхождений двух повторяющихся символов для каждого символа - Pascal ABC

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

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

Дана строка s ,содержащая менее 256 символов.Определить общее число вхождений двух повторяющихся символов для каждого символа , встречающегося в исходной строке. Использовать стандартные процедуры и функции в действиях над строками. Я сделал так
Листинг программы
  1. var s: string;
  2. i,j,k: integer;
  3. c: char;
  4. begin
  5. write('Исходная строка:');
  6. readln(s);
  7. for i:=1 to length(s) do
  8. if s[i]<>' ' then
  9. begin
  10. k:=0;
  11. c:=s[i];
  12. for j:=i to length(s) do
  13. if s[j]=c then
  14. begin
  15. if (j<length(s)) and (s[j+1]=c) then
  16. k:=k+1;
  17. s[j]:=' ';
  18. end;
  19. writeln('Два символа ',c,' встречаются ',k,' раз');
  20. end;
  21. end.
Но при выводе , если в исходной строке встречается 3 символа подряд (Например f nnn ghh) Выводит Два символа n встречаются 2 раз Два символа h встречаются 1 раз Но два "n" встречаются только 1 раз , как пофиксить ? Нельзя эти символы удалять или заменять другими

Решение задачи: «Определить общее число вхождений двух повторяющихся символов для каждого символа»

textual
Листинг программы
  1. m:=[];

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

  1. Создается пустой массив m, который будет содержать результаты подсчета повторений символов. n := 0;
  2. Инициализируется переменная n, которая будет использоваться для отслеживания количества повторений символов. while length(s) > 0 do
    1. Происходит цикл, который выполняется столько раз, сколько символов в строке s. a := s[n];
    2. Получается текущий символ из строки s. if not contains(m, a) then m[length(m)] := a;
    3. Если текущий символ отсутствует в массиве m, то он добавляется в конец массива. n := n + 1;
    4. Переменная n увеличивается на 1, чтобы перейти к следующему символу. s := s[1];
    5. Строка s сдвигается влево на один символ, чтобы пропустить текущий символ. end;
  3. Цикл завершается, когда все символы в строке s будут обработаны. for i in 0 to length(m) do
    1. Происходит цикл, который выполняется столько раз, сколько символов в массиве m. if length(m) > 1 and m[i] = m[i+1] then m[i] := m[length(m)];
    2. Если текущий символ повторяется, то он заменяется на последний символ, который был повторен. m[i] := a;
    3. Если текущий символ не повторяется, то он добавляется в массив m. end;
  4. Цикл завершается, когда все символы в массиве m будут обработаны. for i in 0 to length(m) do
    1. Происходит цикл, который выполняется столько раз, сколько символов в массиве m. if length(m) > 1 and m[i] = m[i+1] then m[i] := m[length(m)];
    2. Если текущий символ повторяется, то он заменяется на последний символ, который был повторен. m[i] := a;
    3. Если текущий символ не повторяется, то он добавляется в массив m. end;
  5. Цикл завершается, когда все символы в массиве m будут обработаны. for i in 0 to length(m) do
    1. Происходит цикл, который выполняется столько раз, сколько символов в массиве m. if length(m) > 1 and m[i] = m[i+1] then m[i] := m[length(m)];
    2. Если текущий символ повторяется, то он заменяется на последний символ, который был повторен. m[i] := a;
    3. Если текущий символ не повторяется, то он добавляется в массив m. end;
  6. Цикл завершается, когда все символы в массиве m будут обработаны.

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


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

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

11   голосов , оценка 3.636 из 5

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

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

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