演習の一環として、文字列圧縮アルゴリズムを少し書きました (基本的には、文字列 "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;
}
しかし、それを見ると、返された文字列の正しいサイズに実際に適合する別のバッファーを作成するべきではないかどうか疑問に思っています。明らかに、これを行うとより多くの処理時間が必要になりますが、より厳密なソリューションが得られます。だから私は、このようなものの一般的な慣行は何だろうと思っています。(一般的に)メモリのために速度を犠牲にする方が良いですか、それともそのままにしておく方が良いですか?
またはさらに良いことに、私が気付いていないこのソリューションを作成するより良い方法はありますか?