二值游程编码
游程编码是对数据压缩的一种方式,这写了一个简单的二值游程编码程序,程序功能如:原始输入:0001110011010100001100 ,压缩之后输出:33221111422
也就是相当于记录每个值连续出现的次数,作为编码值。
#include <iostream> #include <string> #include <vector> #include <queue> #include <iterator> using namespace std; int main() { string str("0001110011010100001100"); queue<int> qu; vector<int> vec; //cin >> str; int len = str.length(); int i = 0; while(len--) { qu.push(str[i++] - '0'); } int a = qu.front(); qu.pop(); i = 1; while(!qu.empty()) { if(a == qu.front()) { i++; a = qu.front(); qu.pop(); //cout<<a; } else { vec.push_back(i); i = 1; a = qu.front(); qu.pop(); //cout<<a; } } vec.push_back(i);//一开始的时候这没有写,少了最后一项 copy(vec.begin(),vec.end(),ostream_iterator<int>(cout,"")); cout<<endl; }
说明:这里简单的使用二值游程编码,当然也可以是字符进行类似编码,只需queue<char> 就行了。
make it simple, make it happen