Подавление повторяющихся символов - Pascal ABC
Формулировка задачи:
Вводится последовательность строк, составленных из символов некоторого алфавита. В каждой строке, содержащей последовательность повторяющихся подряд символов, последняя заменяется эквивалентной последовательностью вида *(k)a, где k-число повторений некоторого символа"a".
Решение задачи: «Подавление повторяющихся символов»
textual
Листинг программы
procedure zamena(var s:string);
var i,j,h:byte;
s1:string;
begin
i:=length(s); //начнем с конца
while i>=1 do
begin
h:=0;
j:=i;
while (j>=1)and(s[j]=s[i]) do //пока символы равны s[i]
begin
h:=h+1; //считаем и идем к началу
j:=j-1;
end;
if h>1 then //если их больше 1
begin
delete(s,j+1,h-1);//удалям все одинаковые кроме одного
s1:='('+inttostr(h)+')'; //такую строку
insert(s1,s,j+1); //вставляем перед оставшися символом
i:=j; //переходим вперед на следующий символ
end
else i:=i-h; //если не больше 3, просто перешагиваем
end;
writeln(s);
end;
var s,s1:string;
n,i:integer;
begin
write('Количество строк n=');
readln(n);
writeln('Введите ',n,' строк символов без круглых скобок с группами одинаковых символов');
for i:=1 to n do
begin
readln(s);
zamena(s);
end;
end.
Объяснение кода листинга программы
Этот код написан на языке Pascal ABC и выполняет следующую задачу: удаляет повторяющиеся символы из строки. Вот как это работает:
- Создается процедура
zamena, которая принимает строкуsв качестве параметра. Внутри процедуры используются три переменные:i,jиh. Переменнаяiустанавливается равной длине строкиs, а переменнаяjустанавливается равнойi. Затем циклwhileвыполняется до тех пор, покаjбольше или равно 1 и символыs[j]иs[i]равны. Внутри цикла переменнаяhустанавливается равной суммеhи 1, а переменнаяjустанавливается равнойjминус 1. Еслиhбольше 1, то все повторяющиеся символы, кроме одного, удаляются из строкиs, и строка преобразуется в формат(n), гдеn- количество уникальных символов. Затем вставляется оставшийся символ перед последним символом строкиs. И, наконец, переменнаяiустанавливается равнойj. - Создается переменная
s1типаstring, которая используется для хранения промежуточных результатов. - Создается переменная
nтипаinteger, которая используется для хранения количества строк символов, введенных пользователем. - Выводится сообщение с запросом количества строк символов.
- Читается количество строк символов от пользователя.
- Для каждой строки символов, введенной пользователем, вызывается процедура
zamena, передавая строку в качестве аргумента. - Выводится результат обработки строки.