资源简介

信息论课程设计,LZW编码方案,C++实现LZW编码。使用txt文本保存和输入输出。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
using namespace std;
ofstream output(“out1.txt“ ios::out);
ifstream input(“in1.txt“ ios::in);
string dic[30];
int n;
int find(string s)    //字典中寻找返回序号
{
int temp = -1;
for (int i = 0; i<30; i++)
{
if (dic[i] == s)
temp = i + 1;
}
return temp;
}
void init()           //字典初始
{
dic[0] = “a“;        //开始时词典包含所有可能的根
dic[1] = “b“;
dic[2] = “c“;
dic[3] = “d“;
for (int i = 4; i<30; i++)     //其余为空
{
dic[i] = ““;
}
}
void code(string str)
{
init();                  //初始化
char temp[2];
temp[0] = str[0];          //取第一个字符
temp[1] = ‘\0‘;
string P = temp;           //P为前缀
int i = 1;
int j = 4;                 //目前字典存储的最后一个位置
cout << “编码后的码字为:“;
output << “编码后的码字为:“;
while (1)
{
char t[2];
t[0] = str[i];          //取下一字符
t[1] = ‘\0‘;
string C = t;           //C为字符流中下一个字符
if (C == ““)             //无码字要译,结束
{
cout << “ “ << find(P);//输出代表当前前缀的码字
output << “ “ << find(P);
break;
}                        //退出循环编码结束
if (find(P + C)>-1)         //有码字要译,如果P+C在词典中,则用C扩展P,进行下一步;
{
P = P + C;
i++;
}
else//如果P+C不在词典中,则将P+C添加到词典中,令P:=C 
{
cout << “ “ << find(P);
output << “ “ << find(P);
string PC = P + C;
dic[j++] = PC;
P = C;
i++;
}

}
cout << endl;
output << endl;
cout << “生成的词典为:“ << endl;
output << “生成的词典为:“ << endl;
for (i = 0; i {
cout << setw(12) << i + 1 << setw(12) << dic[i] << endl;
output << setw(12) << i + 1 << setw(12) << dic[i] << endl;
}
cout << endl;
output << endl;
system(“pause“);
}
void decode(int c[])
{
init();      //译码词典与编码词典相同,将abc设为初始的前缀
int pw cw;   //pw:先前码字,cw:当前码字
cw = c[0];     //输入码字流的第一个码字,赋给当前码字
int j = 3 i;
cout << “译码为:“;
output << “译码为:“;
cout << dic[cw - 1];      //输出当前字符串到字符流
output << dic[cw - 1];
for (int m = 0; m {
pw = cw;             //当前码字赋给先前码字
cw = c[m + 1];
if (cw <= j + 1)        //若当前码字在词典中
{
cout << dic[cw - 1];//输出当前码字锁代表的字符串
output << dic[cw - 1];
char t[2];
t[0] = dic[cw - 1][0];
t[1] = ‘\0‘;
string k = t;
j++;
dic[j] = dic[pw - 1] + k;  //将先前码字与当前码字所代表的字符串的首字符连接而成的字符串添加到词典中                                      
}
else          //若当前码字不在词典中
{
char t[2];
t[0] = dic[pw - 1][0];
t[1] = ‘\0‘;
string k = t;
j++;
dic[j] = dic[pw - 1] + k;      //将先前码字与当前码字所代表的字符串的首字符连接而成的字符串添加到词典中
cout << dic[cw - 1];         //输出该字符串
output << dic[cw - 1];
}
}
cout << endl;
output << endl;
cout << “生成的词典为:“ << endl;
output << “生成的词典为:“ << endl;
for (i = 0; i {
cout << setw(12) << i + 1 << setw(12) << dic[i] << endl;
output << setw(12) << i + 1 << setw(12) << dic[i] << endl;
}
cout << endl;
output << endl;
system(“pause“);
}


int main()      

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-01-21 12:16  .vs\
     目录           0  2018-01-21 12:16  .vs\LZWYXD\
     目录           0  2018-01-21 12:16  .vs\LZWYXD\v14\
     文件       23040  2018-01-14 14:20  .vs\LZWYXD\v14\.suo
     目录           0  2018-01-21 12:16  Debug\
     文件      134656  2018-01-05 19:49  Debug\LZWYXD.exe
     文件      643788  2018-01-05 19:49  Debug\LZWYXD.ilk
     文件     1110016  2018-01-05 19:49  Debug\LZWYXD.pdb
     文件        1300  2018-01-05 19:48  LZWYXD.sln
     文件     8597504  2018-01-14 14:20  LZWYXD.VC.db
     目录           0  2018-01-21 12:16  LZWYXD\
     目录           0  2018-01-21 12:16  LZWYXD\Debug\
     文件         197  2018-01-05 19:49  LZWYXD\Debug\LZWYXD.log
     目录           0  2018-01-21 12:16  LZWYXD\Debug\LZWYXD.tlog\
     文件         662  2018-01-05 19:49  LZWYXD\Debug\LZWYXD.tlog\CL.command.1.tlog
     文件       10292  2018-01-05 19:49  LZWYXD\Debug\LZWYXD.tlog\CL.read.1.tlog
     文件         504  2018-01-05 19:49  LZWYXD\Debug\LZWYXD.tlog\CL.write.1.tlog
     文件        1178  2018-01-05 19:49  LZWYXD\Debug\LZWYXD.tlog\link.command.1.tlog
     文件        2708  2018-01-05 19:49  LZWYXD\Debug\LZWYXD.tlog\link.read.1.tlog
     文件         488  2018-01-05 19:49  LZWYXD\Debug\LZWYXD.tlog\link.write.1.tlog
     文件         214  2018-01-05 19:49  LZWYXD\Debug\LZWYXD.tlog\LZWYXD.lastbuildstate
     文件      347136  2018-01-05 19:49  LZWYXD\Debug\vc140.idb
     文件      462848  2018-01-05 19:49  LZWYXD\Debug\vc140.pdb
     文件      391267  2018-01-05 19:49  LZWYXD\Debug\婧?obj
     文件          80  2018-01-05 15:34  LZWYXD\in2.txt
     文件        7375  2018-01-05 19:48  LZWYXD\LZWYXD.vcxproj
     文件         944  2018-01-05 19:48  LZWYXD\LZWYXD.vcxproj.filters
     文件           0  2018-01-14 14:16  LZWYXD\out1.txt
     文件           0  2018-01-14 14:12  LZWYXD\out2.txt
     文件        4006  2018-01-05 19:48  LZWYXD\婧?cpp

评论

共有 条评论