最近在准备笔试,碰到好几个字符串压缩的问题,看了多种方法,对于初学者,还是这位童鞋的思路比较简单明了。
转自:http://liukexiong.iteye.com/blog/857867
/*
* 字符串原地压缩
* 例如:"eeeeeaaaff8888"压缩为"e5a3f284"
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *change(char *str)
{
int count=0;
char *s=str;
//最坏情况下需要申请的内存空间
char *t=(char *)malloc(strlen(s)*2+1);
if(t==NULL)
{
printf("create fail!\n");
exit(1);
}
char *tt=t;
while(*s!='\0')
{
if(s==str)
{
count++;
}
else
{
if(*s==*(s-1))
{
count++;
}
else
{
*tt=*(s-1);
tt++;
*tt=count+'0';
tt++;
count=1;
}
}
s++;
}
//字符串末尾的并没有添加到tt中保存,因此应该跳出循环后处理之
*tt=*(s-1);
tt++;
*tt=count+'0';
tt++;
*tt='\0';
return t;
}
int main()
{
char *str="eeeeeaaaff8888";
char *result=change(str);
printf("%s\n",result);
return 0;
}