自己覺得寫的不算醜,修的也不算久,還是值得微微感動一下 ?!
轉換成數字的部分~好像可以用sprinrtf (thinking 圖)
會比較快嗎!!!
char* convertReverse(int num){
char* ret = calloc (2000, sizeof(char));
int idx =0;
while (num >0)
{
ret[idx++]= num%10 + '0';
num /=10;
}
ret[idx]='\0';
return ret;
}
int compress(char* chars, int charsSize) {
int newIdx = 0;
for (int i=0; i<charsSize; i++)
{
int idx= i;
int count = 0 ;
while (idx < charsSize && chars[i]== chars[idx])
{
count++;
idx++;
}
// add first one
chars[newIdx++] = chars[i];
if (count==1) //no number
continue;
//convert to digit
char *numStr = convertReverse(count);
int len = strlen(numStr);
for (int k=len-1; k>=0; k--)
chars[newIdx++] = numStr[k];
i= idx-1; // back one since we have i++
}
return newIdx;
}
要試試看嗎?XD
感覺沒有快多少, 那就算了XD
//convert to digit
#if 0
char *numStr = convertReverse(count);
int len = strlen(numStr);
for (int k=len-1; k>=0; k--)
chars[newIdx++] = numStr[k];
#else
char *numStr = calloc (2000, sizeof(char));
sprintf(numStr, "%d",count );
int len = strlen(numStr);
for (int j=0; j<len; j++)
chars[newIdx++] = numStr[j];
#endif
沒有留言:
張貼留言