字串壓縮演算法
阿新 • • 發佈:2021-08-02
#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; }