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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值