字符串原处压缩
字符串原地压缩
/* * 字符串原地压缩 * 例如:"eeeeeaaaff"压缩为"e5a3f2" */ #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="eeeeeaaaff"; char *result=change(str); printf("%s\n",result); return 0; }