实验四 LZW编码方案程序设计
一、实验目的
(1)进一步熟悉通用编码算法;
(2)掌握 C 语言程序设计和调试过程中数值进制转换、数值与字符串之间的转换等技术。
二、实验要求
(1)输入:本程序将从标准输入中读入待压缩的数据流;
(2)输出:将压缩结果输出到标准输出上去。
三、LZW 算法描述
1:procedure LZW
2:字典初始化:将压缩文件中所有使用到的单字节字符放入字典中,为了压缩任何类型的
文件,可以将字典的前 256 个位置(0x000 到 0x0FF)一次分配给 0x00 到 0xFF 的 256
个单字节字符。
3:动态数据初始化:初始化新单词存放位置指针 P。将它指向字典的第一个空位置。例如
P=256(即 0x100),读入被压缩文件的第一个字符 cha,作为待处理单词 W。单词的前
缀 Q 为空,即 Q=4095,尾字符就是 cha,序号(码字)就是 cha 的序号。
4:如果文件再没有字符了,输出当前单词的序号。编码结束。如果文件中还有字符,把当
前单词 W 作为前缀,再从被压缩文件中读入一个字符 CH,把 CH 作为尾字符,得到一
个单词 W
1
。
5:如果字典中已有 W
1
,则将 W
1
看做当前单词 W,返回第三步。如果字典中没有 W
1
(发
现一个新单词),先将原单词 W 的序号输出,再加新单词 W
1
,增加到字典中,然后把
刚刚读入的字符 CH 作为当前单词 W,返回第三步。
6:end procedure
--------------------------------------------------------------------------------------------------------------------
四、实验代码
/*
程序说明:
对输入的任意字符串,实现字典编码
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
char wd[4096][20];
char str[20],w[20],w1[20],c[20];