您的位置:首页 > 其它

游程编码和Huffman编码

2016-09-08 20:46 309 查看
#include <iostream>
#include <stdio.h>
using namespace std;

string RunLengthEncoding(string str){
int size = str.size();
if(size <= 0){
return "";
}//if
string result(str.substr(0,1));
int count = 0;
char * temp = new char[100];
for(int i = 0;i < size;++i){
if(i > 0 && str[i] != str[i-1]){
if(count > 1){
sprintf(temp,"%d",count);
result += temp;
}//if
result += str[i];
count = 0;
}//if
++count;
}//for
if(count > 1){
sprintf(temp,"%d",count);
result += temp;
}//if
return result;
}

string RunLengthDecoding(string str)
{
string result;
char temp = str[0];
for (int i = 0; i < str.size();)
{
if(str[i] < '0' || str[i] > '9')
{
if(str[i+1]< '0' || str[i+1] > '9')
{
result += str[i];
i++;

}
else
{
int number = 0;
temp = str[i];
i++;
while( str[i] >= '0' && str[i] <= '9')
{
number *= 10;
number += (str[i] - '0');
i++;
}
while(number--)
{
result += temp;
}
}
}
}
return result;
}
int main(){
//string str("aaaaaaaaaabbbaxxxxyyzyx");
//string str("abbbb");
string str("a");
string result = RunLengthEncoding(str);
string str2("aaaaaaaaaabbbaxxxxyyzyx");
string result2 = RunLengthEncoding(str2);
cout<<"压缩后数据->"<<result<<endl;
cout<<"压缩后数据->"<<result2<<endl;

string decoding = RunLengthDecoding(result2);
cout<<"解压缩后数据->"<<decoding<<endl;
return 0;
}


附件是huffman编码的实例,主要要弄明白精华。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息