字符串原地压缩 (思路清晰明了)

来源:互联网 发布:淘宝客服速成 编辑:程序博客网 时间:2024/05/02 05:04

最近在准备笔试,碰到好几个字符串压缩的问题,看了多种方法,对于初学者,还是这位童鞋的思路比较简单明了。

转自: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;}