#include <stdio.h>
int main()
{
void Compress(char *pStr, int len);
char a[] = "aaaaabbbbcdefffffghhhhhhhhhhhb";
int len = sizeof (a) / sizeof (char);
printf("%s\n", a);
Compress(a, len);
printf("%s\n", a);
return 0;
}
// 压缩字符串
// aaaaabbbbcdefffffghhhhhhhhhhhb
// a5b4cdef5gh11b
void Compress(char *pStr, int len)
{
if (pStr == NULL)
return;
char *p1 = pStr;
char *p2 = pStr;
while (*p2)
{
int i;
int count = 1;
for (i = 0; i < len; i++)//统计重复数
{
if (*p1 == *(++p1))//此时p1指向下一个数
count++;
else
break;
}
if (count == 1)
{
p2++;
}
else if (count < 10)//字符串左移count-2位
{
*(++p2) = count+48;
p2++;
char *p3 = p1;
char *p4 = p2;
p1 = p2;
while(*p3)
{
*p4 = *p3;
p3++;
p4++;
}
*p4 = *p3;
}
else if (count >= 10)//重复超过10个的话,字符串左移count-3位
{
*(++p2) = count / 10 + 48;
*(++p2) = count % 10 + 48;
p2++;
char *p3 = p1;
char *p4 = p2;
p1 = p2;
while(*p3)
{
*p4 = *p3;
p3++;
p4++;
}
*p4 = *p3;
}
}
}