如下例子,用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