我写了一个小字符串压缩算法作为练习的一部分(基本上采用字符串“aaaabbbccc”并返回“a4b3c3”)。代码如下:
char *compress(char string[])
{
char buffer[256];
char *pBuffer = buffer;
char* pStr = (string - 1);
char currentCharacter = 0;
int length = 0;
while (*++pStr != 0)
{
currentCharacter = *pStr;
int currentCharacterLength = 1;
while ((*(pStr + 1) == currentCharacter) && (*pStr != 0))
{
currentCharacterLength++;
++pStr;
}
*pBuffer++ = currentCharacter;
*pBuffer++ = (char)currentCharacterLength;
}
(*pBuffer) = 0;
return buffer;
}
但是看着它,我想知道我是否不应该创建另一个实际上适合返回字符串的正确大小的缓冲区。显然,这样做将需要更多的处理时间,但会导致更紧凑的解决方案。所以我想知道,这样的事情的一般做法是什么。牺牲速度来换取内存是更好(通常),还是保持原样更好?
或者更好的是,有没有更好的方法来编写我什至不知道的解决方案?