游程编码和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编码的实例,主要要弄明白精华。
相关文章推荐
- Huffman编码的8种实现方式
- 编程练习——huffman编码
- C#实现Huffman编码和解码
- 游程编码
- 对Huffman编码的思考,熵
- Huffman编码
- 算法导论16.3_Huffman编码+优先队列(堆实现)
- Huffman编码
- huffman编码——原理与实现
- 游程编码!
- HDOJ 1053 Huffman编码 自写优先队列的ADT 权当做练习数据结构
- 南邮 OJ 1267 多元Huffman编码问题
- Huffman编码(Huffman树)
- 游程编码问题
- GZIP压缩原理分析(13)——第五章 Deflate算法详解(五04) 预备知识(03) 游程编码
- 基于Java实现的huffman编码
- Huffman编码与解码
- ZOJ 2339 Hyperhuffman(Huffman编码)
- Huffman树与Huffman编码
- 用优先队列的huffman编码实现