如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;//没有重复的了,压缩完毕,结束递归
};