Viết chương trình để nén và giải nén một xâu ký tự. Ví dụ: Xâu 'AAAABBBCDDDDDDDEEF
Câu 27: Viết chương trình để nén và giải nén một xâu ký tự. Ví dụ: Xâu 'AAAABBBCDDDDDDDEEF' sau khi nén sẽ trở thành '4A3BC7D2EF'.
Câu 27: Viết chương trình để nén và giải nén một xâu ký tự. Ví dụ: Xâu 'AAAABBBCDDDDDDDEEF' sau khi nén sẽ trở thành '4A3BC7D2EF'.
Chương trình nén xâu:
uses crt;
var s,t,k:string;
i,d:longint;
begin
clrscr;
write('Nhap xau: '); readln(s);
d:=1;
for i:=2 to length(s) do
begin
if s[i]=s[i-1] then inc(d);
if (s[i]<>s[i-1]) then
begin
str(d,t);
if d>1 then k:=k+t+s[i-1] else k:=k+s[i-1]; d:=1;
end;
if i=length(s) then begin str(d,t);
if d>1 then k:=k+t+s[i] else k:=k+s[i];
end;
end;
write('Xau sau khi nen: ',k);
readln
end.
Chương trình giải nén xâu:
Uses crt;
Var St,St1,x:string;
i,j,k,l:longint;
Begin
Clrscr;
readln(St);
For i:=1 to length(St) do
If (St[i] in ['a'..'z']) then
If not (St[i-1] in ['0'..'9']) then Insert('1',St,i);
For i:=1 to length(St) do
Begin
If St[i] in ['0'..'9'] then
For j:=i+1 to length(St) do
If St[j] in ['a'..'z'] then break;
x:=copy(St,i,j-i);
Val(x,k);
For l:=1 to k do St1:=St1+St[j]; end;
write(St1);
readln
end.