#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