#include<stdlib.h> #include<stdio.h> #include<string.h> #include<malloc.h> #include<memory.h> //以时间优先的方式压缩解压字符串 //aaaabbdfdfggcvbnnhhttttttt //4a2bdfdf2gcvb2n2h7t //aaaabbdfdfggcvbnnhhttttttt char* timeFaseZip(char* str) { int length = strlen(str); char* newStr = calloc(length + 1, 1); char* p = str; char* newP = newStr; while (*p) { char* tp = p; char ch = *tp; int strLength = 0; while (*tp==*(tp+1)) { tp++; strLength++; } if (strLength == 0) { *newP++ = *p++; } else { *newP = strLength + 1 + ‘0‘; *(newP + 1) = *p;//保存字符 newP += 2; p += strLength + 1; } } length = strlen(newStr); newStr = _recalloc(newStr, length + 1, 1);//压缩内存 return newStr; } char* timeFaseUnZip(char* str) { char* newStr = calloc(10000, 1); char* p = str; char* newP = newStr; while (*p) { char* tp = p; if (*tp >= ‘0‘ && *tp <= ‘9‘) { int length = *tp - ‘0‘; for (int i = 0; i < length; i++) { *newP++ = *(tp + 1); } p += 2; } else { *newP++ = *p++; } } int length = strlen(newStr); newStr = _recalloc(newStr, length + 1, 1);//压缩内存 return newStr; } int main() { char str[1024] = "aaaabbdfdfggcvbnnhhttttttt"; printf("%s\n", str); printf("%s\n", timeFaseZip(str)); printf("%s\n",timeFaseUnZip(timeFaseZip(str))); return 0; }
原文:https://www.cnblogs.com/ITduange/p/15091586.html