时间优先的方式实现数据的压缩、解压缩
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> // "aaaaabbbhaihualovefangfangooooooooo"; --> 5a3bhaihualovefangfang9o char * timefastzip(char *str) { int length = strlen(str); // 获取待压缩字符串的长度 char *newstr = (char *)calloc(length, sizeof(char)); // 给压缩的字符串开辟内存 char *pstr = str; char *pnewstr = newstr; // 保存分配内存的首地址 while (*pstr != '\0') { int charlength = 0; char * p = pstr; while (*p == *(p + 1)) { charlength++; // 统计重复字母次数 p++; } if (charlength == 0) *pnewstr++ = *pstr++; else { *pnewstr = charlength + 1 + '0'; // 重复字母个数转化为数值型字符 *(pnewstr + 1) = *pstr; pnewstr += 2; pstr += charlength + 1; } } _recalloc(newstr, strlen(newstr), sizeof(char)); // 释放压缩的空间 return newstr; } char * timefastunzip(char *str) { char *newstr = (char *)calloc(10000, sizeof(char)); char *pstr = str; char *pnewstr = newstr; while (*pstr != '\0') { char *p = pstr; if (*p >= '0'&&*p <= '9') { int length = *p - '0'; for (int i = 0; i < length; i++) { *pnewstr++ = *(p + 1); } pstr += 2; } else { *pnewstr++ = *pstr++; } } _recalloc(newstr, strlen(newstr), sizeof(char)); return newstr; } void main006() { char str[1024] = "aaaaabbbhaihualovefangfangooooooooo"; // 5a3bhaihualovefangfang9o printf("%s \n", str); printf("%s \n", timefastzip(str)); printf("%s \n", timefastunzip(str)); system("pause"); }