您的位置:首页 > 其它

字符串压缩算法

2013-10-18 16:47 267 查看
如aaabsssc8999kkk,压缩后为3ab3sc8393k

string CompressString(string& source)
{
const char*cur = source.c_str();
int ilength = strlen(cur) + 1;  //这里一定要加1,利用source里的结束符'\0'来保证字节串的结尾是没有重复的字符
if(0 >= ilength) return "";

int number = 1;
int pos = 0;
char prechar = cur[0];
for(int i=1;i<ilength;i++)
{
if(prechar == cur[i])
{
number++;
}
else
{
if(number > 1)
{
char buffer[20];
sprintf(buffer,"%d%c",number,cur[i-1]);
source = source.replace(pos,number,buffer,2);
return CompressString(source); //通过递归去压缩剩下的字符串
}else
{
pos = i;
prechar = cur[i];
number = 1;
}
}
}

if(1 == number) return source;//没有重复的了,压缩完毕,结束递归
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: