1. 程式人生 > 其它 >字串壓縮演算法

字串壓縮演算法

#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;
}