二值游程编码

游程编码是对数据压缩的一种方式,这写了一个简单的二值游程编码程序,程序功能如:原始输入: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> 就行了。