BÀI TẬP 37: NÉN VÀ GIẢI NÉN XÂU

Một xâu kí tự co thể “nén” theo cách sau: Một xâu con gồm n>1 kí tự giống nhau, chẳng hạn gồm n kí tự “a” sẽ được ghi thành na. Ví dụ xâu ‘aaaabbcd’ sẽ được nén thành 4a2bcd. Hãy viết chương trình nén và giải nén. (Chú ý trong các xâu được nén phải không có chữ số).

            Dữ liệu vào: Cho trong tệp String,inp

            Kết quả: Ghi vào tệp String.out

String.inp

String.out

aaaabbcd

3a2b

4a2bcd

aaabb


CODE THAM KHẢO
program Nen_GiaiNen_xau;
const fi ='string.inp';
      fo ='string.out';
var f,g:text;
    s1, s2: string;
procedure doc;
begin
        assign(f,fi); reset(f);
        readln(f,s1);
        readln(f,s2);
        close(f);
end;
procedure Nen;
var s,kq:string; i,d:integer; ch:char;
begin
        d:=1; s1:=s1+#32; ch:=s1[1]; kq:='';
        for i:=2 to length(s1) do
        if s1[i] = s1[i-1] then inc(d)
        else
        begin
                str(d,s);
                if d<>1 then kq:=kq+s+ch else kq:=kq+ch;
                d:=1;
                ch:=s1[i];
        end;
        writeln(g,kq);
end;
procedure Giainen;
var kq,so:string; i,j,code,n: integer;
begin
        i:=1; kq:='';
        repeat
                so:='0';
                while s2[i] in ['1'..'9'] do
                begin
                        so:=so+s2[i];
                        inc(i);
                end;
                val(so,n,code);
                if n > 1 then
                        for j:=1 to n do kq:=kq+s2[i]
                else kq:=kq+s2[i];
                inc(i);
        until i > length(s2);
        writeln(g,kq);
end;
begin
        assign(g,fo); rewrite(g);
        doc;
        Nen;
        Giainen;
        close(g);
end.


Đăng nhận xét

[blogger]

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.
Javascript DisablePlease Enable Javascript To See All Widget