C++实现行程编码

如下例子,用c++实现一个字符串行程编码压缩的算法
demo:

#include <stdio.h>
#include <string.h>
#include <iostream>

using namespace std;

char * compress(unsigned char* chs){
    int len = strlen((char *)chs);
    int count = 0;
    int p = 0;
    char * cm = new char[len*2]; //创建数组存放压缩后的字符串
    for (int i = 0; i < len; i++)
    {
        if (count == 0) //第一遍循环进入
        {
            cm[p] = chs[i]; //填入字母
            p++;
        }
        if (chs[i - 1] != chs[i] && i != 0) //第二遍往后符合条件进入,当前一个和当前字母不相同时
        {
            cm[p] = count + '0'; //数字转ascll,并填入
            p++;
            count = 1;
            cm[p] = chs[i]; //填入字母
            p++;
        }
        else
        {
            count++;
        }
    }
    cm[p] = count + '0';//数字转ascll,并填入
    p++;

    return cm;
}

unsigned char * decompress(char* chs){
    cout << chs << endl;
    int len = strlen(chs);
    char * decompressStr = new char[len];
    unsigned char * decompressStr2 = new unsigned char[len];
    int pos = 0;
    for(int i = 0; i < len;){
        //cout << chs[i];
        //cout << chs[i + 1] << endl;
        pos = pos + (int)chs[i + 1];
        for(int j = 0; j < chs[i + 1]; j++){
            decompressStr[pos] = chs[i];
        }
        i = i + 2;
    }
    cout << "decompressStr" << decompressStr;
    return decompressStr2;

}

int main()
{
    unsigned char chs[] = "aaabccccaaFff222";
    int len = strlen((char *)chs);
    char * compressStr = new char[len*2];
    unsigned char * decompressStr = new unsigned char[len];
    compressStr = compress(chs);
    cout << "compressStr:" << compressStr << endl;

    //
    //decompressStr = decompress(compressStr);


}

输出:
D:\C++Test\cmake-build-debug\C__Test.exe 5 abc
compressStr:a3b1c4a2F1f223

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/alspd_zhangpan/article/details/107614692