LZW C++ 简单实现
LZW C++ Simple Implementation
所以我正在尝试用 C++ 制作一个简单的文件压缩器/解压缩器(我的目标不是最好的结果)但我真的被卡住了,因为我充满了疑问,所以他们是:
我应该使用哪种字典(我正在使用地图)?
我应该存储什么样的数据(我使用 String/int 作为 key/value )?
我应该用 ASCII 初始化字典吗?
我看到有些人使用节点,这是一个很好的方法吗?
这是目前为止的代码:
#define MAX = 1024 //2^10 Where the dictionary reset
int main(int argc, char *argv[]){
ifstream in(argv[2], ios_base::binary);
ofstream of(argv[3], ios_base::binary);
string str ;
char c;
int i;
if (string(argv[1]) == "-c" ){
map<string,int> Dic;
while (in.get(c))
{
}
in.close();
}
}
欢迎对代码提出任何意见!
答案由算法得出,描述可取,例如here。
1) 如果输入的字符串已经存在,您需要经常检查。您不需要 std::map 提供的字符串顺序,您可以使用 std::unordered_map,它使用散列并且效率更高。
2) 您可以使用字符串/无符号整数,因为索引 > 0。
3) 是的,从算法描述初始字典是256个ASCII字符。
4) "nodes" 是什么意思?
尝试实现文章中描述的内容。提供的示例可以是单元测试。
所以我正在尝试用 C++ 制作一个简单的文件压缩器/解压缩器(我的目标不是最好的结果)但我真的被卡住了,因为我充满了疑问,所以他们是:
我应该使用哪种字典(我正在使用地图)? 我应该存储什么样的数据(我使用 String/int 作为 key/value )? 我应该用 ASCII 初始化字典吗? 我看到有些人使用节点,这是一个很好的方法吗?
这是目前为止的代码:
#define MAX = 1024 //2^10 Where the dictionary reset
int main(int argc, char *argv[]){
ifstream in(argv[2], ios_base::binary);
ofstream of(argv[3], ios_base::binary);
string str ;
char c;
int i;
if (string(argv[1]) == "-c" ){
map<string,int> Dic;
while (in.get(c))
{
}
in.close();
}
}
欢迎对代码提出任何意见!
答案由算法得出,描述可取,例如here。
1) 如果输入的字符串已经存在,您需要经常检查。您不需要 std::map 提供的字符串顺序,您可以使用 std::unordered_map,它使用散列并且效率更高。
2) 您可以使用字符串/无符号整数,因为索引 > 0。
3) 是的,从算法描述初始字典是256个ASCII字符。
4) "nodes" 是什么意思?
尝试实现文章中描述的内容。提供的示例可以是单元测试。