/*
* Zip a string. For example, "aaabcc" => "3ab2c".
* You should directly update the input string.
*/
void strzip(char *str)
{
int count;
char *p, *idx, c;
for (count = 0, p = idx = str; str[0]; str++)
if (p[0] == str[0])
count++;
else {
if (count > 1) {
c = str[0];
idx += sprintf(idx, "%d%c", count, p[0]);
str[0] = c;
} else
*idx++ = p[0];
p = str;
count = 0;
}
if (p < str - 1)
idx += sprintf(idx, "%d%c", count + 1, p[0]);
else
*idx++ = p[0];
*idx = '\0';
}
int main(void)
{
char test1[20] = "aaabcc"; // => "3ab2c"
char test2[20] = "aab"; // => "2ab"
char test3[20] = "a"; // => "a"
char test4[20] = ""; // => ""
char test5[20] = "abcd"; // => "abcd"
char test6[20] = "aaaaaaaaaaaaaaaab"; // => "16ab"
strzip(test1);
printf("%s\n", test1);
strzip(test2);
printf("%s\n", test2);
strzip(test3);
printf("%s\n", test3);
strzip(test4);
printf("%s\n", test4);
strzip(test5);
printf("%s\n", test5);
strzip(test6);
printf("%s\n", test6);
return 0;
}