Определить общее число вхождений двух повторяющихся символов для каждого символа - Pascal ABC
Формулировка задачи:
Дана строка s ,содержащая менее 256 символов.Определить общее число вхождений двух повторяющихся символов для каждого символа , встречающегося в исходной строке. Использовать стандартные процедуры и функции в действиях над строками.
Я сделал так
Но при выводе , если в исходной строке встречается 3 символа подряд (Например f nnn ghh)
Выводит
Два символа n встречаются 2 раз
Два символа h встречаются 1 раз
Но два "n" встречаются только 1 раз , как пофиксить ? Нельзя эти символы удалять или заменять другими
Листинг программы
- var s: string;
- i,j,k: integer;
- c: char;
- begin
- write('Исходная строка:');
- readln(s);
- for i:=1 to length(s) do
- if s[i]<>' ' then
- begin
- k:=0;
- c:=s[i];
- for j:=i to length(s) do
- if s[j]=c then
- begin
- if (j<length(s)) and (s[j+1]=c) then
- k:=k+1;
- s[j]:=' ';
- end;
- writeln('Два символа ',c,' встречаются ',k,' раз');
- end;
- end.
Решение задачи: «Определить общее число вхождений двух повторяющихся символов для каждого символа»
textual
Листинг программы
- m:=[];
Объяснение кода листинга программы
- Создается пустой массив m, который будет содержать результаты подсчета повторений символов. n := 0;
- Инициализируется переменная n, которая будет использоваться для отслеживания количества повторений символов.
while length(s) > 0 do
- Происходит цикл, который выполняется столько раз, сколько символов в строке s. a := s[n];
- Получается текущий символ из строки s. if not contains(m, a) then m[length(m)] := a;
- Если текущий символ отсутствует в массиве m, то он добавляется в конец массива. n := n + 1;
- Переменная n увеличивается на 1, чтобы перейти к следующему символу. s := s[1];
- Строка s сдвигается влево на один символ, чтобы пропустить текущий символ. end;
- Цикл завершается, когда все символы в строке s будут обработаны.
for i in 0 to length(m) do
- Происходит цикл, который выполняется столько раз, сколько символов в массиве m. if length(m) > 1 and m[i] = m[i+1] then m[i] := m[length(m)];
- Если текущий символ повторяется, то он заменяется на последний символ, который был повторен. m[i] := a;
- Если текущий символ не повторяется, то он добавляется в массив m. end;
- Цикл завершается, когда все символы в массиве m будут обработаны.
for i in 0 to length(m) do
- Происходит цикл, который выполняется столько раз, сколько символов в массиве m. if length(m) > 1 and m[i] = m[i+1] then m[i] := m[length(m)];
- Если текущий символ повторяется, то он заменяется на последний символ, который был повторен. m[i] := a;
- Если текущий символ не повторяется, то он добавляется в массив m. end;
- Цикл завершается, когда все символы в массиве m будут обработаны.
for i in 0 to length(m) do
- Происходит цикл, который выполняется столько раз, сколько символов в массиве m. if length(m) > 1 and m[i] = m[i+1] then m[i] := m[length(m)];
- Если текущий символ повторяется, то он заменяется на последний символ, который был повторен. m[i] := a;
- Если текущий символ не повторяется, то он добавляется в массив m. end;
- Цикл завершается, когда все символы в массиве m будут обработаны.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д