资源简介
c++编写的简单LZ78编码程序,内附步骤说明
代码片段和文件信息
#include
#include
using namespace std;
void main()
{
//////////////////////////////////////////////////////////////////////////////////////////初始化操作
int i=0j=0z=0flag=0p_count=0;
char *p; //字符指针p
string C=““; //当前字符C
char str[20]; //字符数组str
int pos[20]; //位置数组
string dic[20]; //字典数据的存储
string Z[20]; //Z字典为空
string P=““; //P前缀为空
cin>>str; //输入字符数组
p=str; //指针指向str
//////////////////////////////////////////////////////////////////////////////////////////输入操作
cout< for(i=0;i {cout< cout< for(i=0;i {cout<<*(p+i)<<“ “;}
cout< cout<<“编码过程:“< cout<<“步骤“<<“ “<<“位置“<<“ “<<“字典“<<“ “<<“输出“<
//////////////////////////////////////////////////////////////////////////////////////////编码过程
do
{
C=*p;//当前字符为str中字符
for(i=0;i<=z;i++)//寻找字典中内容
{
if((P+C)==Z[i])//判断P+C是否在词典中
{
P=P+C;//后缀累积
flag=1;//标志位提示有相同单元
break;//跳出循环
}
}
if(flag==0)//如果没在字典中找到
{
Z[z]=P+C;//存入字典
for(j=0;j<=z;j++)//一系列输出操作:若为单字符自动加入字典双字符则比较后得出输出位置
{
if(P==Z[j] || Z[z].length()==1)//编码过程的显示
{
cout< pos[z+1]=p_count+2-Z[z].length(); //存储位置至数组pos
dic[p_count+2-Z[z].length()]=Z[z]; //存储字典至数组dic
cout< if(Z[z].length()!=1)
cout<<“(“< else
cout<<“(0“< break;
}
}
z++;//数组下一位
P=““;//清空
}
}
while(flag=0p_count++*(++p)!=‘\0‘);//标志位清空非‘\0‘情况下循环再次开始
if(P!=““)//检测前缀P是否为空
{
cout<<“剩余编码:“< }
for(i=0;i<10;i++)
cout<
////////////////////////////////////////////////////////////////////////////////////////////解码过程
cout< cout<<“例如:0A0B0C1A1B... ...“< char str1[20];
char *p1;
int m=0k=0;
cin>>str1;
p1=str1;
cout<<“解码结果:“< for(;*(p1+k)!=‘\0‘;k++)
{
if(k%2==0)
{
m=*(p1+k);
if(m==48)
cout<<““;
else
cout< }
else
cout<<*(p1+k);
}
cout< ////////////////////////////////////////////////////////////////////////////////////////////解码结束
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-12-03 16:07 LZ78\
文件 57856 2013-12-03 16:09 LZ78\LZ78编码步骤.doc
文件 2882 2013-12-03 16:04 LZ78\LZcode.cpp
- 上一篇:数据结构 严蔚敏 C语言版 括号匹配
- 下一篇:二叉树的前序中序后序遍历代码
评论
共有 条评论