Lập trình mã hóa xâu kí tự bằng Pascal
Mã hóa (nén), giải mã (nén) xâu (Tùy vào yêu cầu mã hóa mà cách thực hiện khác nhau ở đây xét VD mã hóa như sau: ‘AAAABBBCDDDDDDDEEF’ mã hóa (nén) thành ‘4A3BC7D2EF’)
Mã hóa:Dùng xâu mới để chứa mã hóa- Lặp lại thao tác: (Đếm xem có bao nhiêu kí tự liên tiếp giống kí tự đầu tiên, đếm đến đâu xóa dần đến đó, ghi vào xâu mã hóa) cho đến khi xóa hết kí tự của xâu. |
Giải mã:Dùng xâu mới để chứa xâu giải mã- lặp lại thao tác ( Nếu vị trí đầu không chứa số thì chuyển sang xâu giải mã, nếu có số thì duyệt các vị trí tiếp theo để xác định số đó -ghi kí tự tiếp theo bấy nhiêu lần sang xâu mới, xóa phần đã giải mã) cho đến hết xâu. |
4.7.1. Viết chương trình mã hóa xâu (trong xâu không chứa kí tự số) không quá 255 kí tự như sau: ‘AAAABBBCDDDDDDDEEF’ mã hóa (nén) thành ‘4A3BC7D2EF’
Dữ liệu vào file: mahoa.INP có một dòng không quá 255 kí tự
Dữ liệu ra file: mahoa.OUT chứa dòng đã mã hóa
VD:
mahoa.int | mahoa.out |
AAAABBBCDDDDDDDEEF | 4A3BC7D2EF |
Xem code:
var s1,s2,x_dem:string; tem:char;dem:word;f:text; begin {----Doc file ----} assign(f,'mahoa.inp'); reset(f); readln(f,s1);close(f); {--------------------------------} while length(s1)>0 do if (s1[1] <>s1[2] )or(length(s1)=1) then//dem so ki tu giong nhau cua s1 nen ghi vao s2 begin s2:=s2+s1[1] ; delete(s1,1,1); end else begin dem:=1; while (s1[1] =s1[2] )and (length(s1)>1) do begin dem:=dem+1; delete(s1,1,1); end; str(dem,x_dem); s2:=s2+x_dem+s1[1] ; delete(s1,1,1); end; {------ghi file -----} assign(f,'mahoa.out'); rewrite(f); write(f,s2); close(f); end.