#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编码的实例,主要要弄明白精华。