Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите пожалуйста очень срочно надо!

Тамара Иараджули Ученик (199), закрыт 13 лет назад
Дан текстовый файл.Составить программу сжатия файла по следующему принципу: каждая подпоследовательность, состоящая более чем из четырех вхождении одного и того же символа, заменяется на текст х(к) где х - символ, а к -число вхождении символа х в исходную последовательность.
Лучший ответ
Jurii Высший разум (176032) 13 лет назад
На Паскале это будет выглядеть вот так:
var
S, Ss : String;
A : array [1..255] of record C : Char; K : Byte; end;
N, K, i : Byte;
begin
Write('Введите текст: '); ReadLn(S);
{ Разложим строку на символы. Если символы подряд повторяются, то считаем. }
K := 1; A[K].C := S[1]; A[K].K := 1;
for N := 2 to Length(S) do
if S[N] = A[K].C then
A[K].K := A[K].K + 1
else
begin
K := K + 1;
A[K].C := S[N];
A[K].K := 1;
end;
{ Сложим строку заново. Если количество повторяющихся символов > 4, то заменим на c(k)}
S := '';
for N := 1 to K do
if A[N].K > 4 then
begin
Str(A[N].K, Ss);
S := S + A[N].C + '(' + Ss + ')';
end
else
for i := 1 to A[N].K do S := S + A[N].C;
WriteLn('Сжатый текст: ', S);
end.
Результат выполнения:
Введите текст: 1223334444555556666667777777888888889999999990
Сжатый текст: 12233344445(5)6(6)7(7)8(8)9(9)0
Остальные ответы
Похожие вопросы