資源簡介
信息論課程設(shè)計,LZW編碼方案,C++實現(xiàn)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?==?““)?????????????//無碼字要譯,結(jié)束
{
cout?<“?“?< output?<“?“?< break;
}????????????????????????//退出循環(huán)編碼結(jié)束
if?(find(P?+?C)>-1)?????????//有碼字要譯,如果P+C在詞典中,則用C擴展P,進行下一步;
{
P?=?P?+?C;
i++;
}
else//如果P+C不在詞典中,則將P+C添加到詞典中,令P:=C?
{
cout?<“?“?< output?<“?“?< string?PC?=?P?+?C;
dic[j++]?=?PC;
P?=?C;
i++;
}
}
cout?< output?< cout?<“生成的詞典為:“?< output?<“生成的詞典為:“?< for?(i?=?0;?i {
cout?< output?< }
cout?< output?< system(“pause“);
}
void?decode(int?c[])
{
init();??????//譯碼詞典與編碼詞典相同,將abc設(shè)為初始的前綴
int?pw?cw;???//pw:先前碼字,cw:當前碼字
cw?=?c[0];?????//輸入碼字流的第一個碼字,賦給當前碼字
int?j?=?3?i;
cout?<“譯碼為:“;
output?<“譯碼為:“;
cout?< output?< for?(int?m?=?0;?m {
pw?=?cw;?????????????//當前碼字賦給先前碼字
cw?=?c[m?+?1];
if?(cw?<=?j?+?1)????????//若當前碼字在詞典中
{
cout?< output?< 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?< output?< }
}
cout?< output?< cout?<“生成的詞典為:“?< output?<“生成的詞典為:“?< for?(i?=?0;?i {
cout?< output?< }
cout?< output?< 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\li
?????文件????????2708??2018-01-05?19:49??LZWYXD\Debug\LZWYXD.tlog\li
?????文件?????????488??2018-01-05?19:49??LZWYXD\Debug\LZWYXD.tlog\li
?????文件?????????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
- 上一篇:警察抓小偷C代碼
- 下一篇:可以將C語言轉(zhuǎn)變?yōu)閰R編的編譯器
評論
共有 條評論