小程序 - 压缩字符串

/*
* 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;
}

 

posted @ 2016-03-21 13:18  brayden  阅读(474)  评论(0)    收藏  举报