RLE算法是最简单的压缩算法,作为学生党做作业不可避免的要去网上找RLE算法的代码,然而网上所有RLE压缩算法的代码都不好使,笔者在网上代码的基础上略加修改,使之粘贴即可使用。
源码来自:http://blog.youkuaiyun.com/calcular/article/details/46804919
算法思想来自:http://blog.youkuaiyun.com/orbit/article/details/7062218
感谢原作者。
原代码的问题在于,当一个字符超过127次重复之后,编码会出现错误。原作者可能并没有用足够的样本去测试,导致这个bug的出现。
废话不多说,先上代码。
bool IsRepeat3(unsigned char *in, int rest)
{
if (rest<2) return false;
else {
if (*in == *(in + 1) && *in == *(in + 2)) return true;
else return false;
}
}
int GetNoRepeat3(unsigned char *in, int rest)
{
if (rest <= 2)
return rest + 1;
else {