_在路上

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

该题目摘自《C专家编程》附录A.4 编程挑战。

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void DisOneStr (const char * str, int k, int n)
{
    int     i, j;
    char *  buf;

    if (k <= 0 || n <= 0 || k > n)
        return ;

    if (k == 1)
    {
        for (i = 0; i < n; i++)
            printf("%c\r\n", str[i]);
        return ;
    }

    buf = (char *)malloc(k + 1);
    buf[k] = 0;

    for (i = 0; i < n - k + 1; i++)
    {
        strncpy(buf, &str[i], k - 1);
        for (j = i + k - 1; j < n; j++)
        {
            buf[k - 1] = str[j];
            printf("%s\r\n", buf);
        }
    }

    free(buf);
}

void DisAllStr (const char * str)
{
    int i, len;

    len = strlen(str);
    
    for (i = 1; i <= len; i++)
        DisOneStr(str, i, len);
}

int main ()
{
    char *p = "0123456789";
 
    DisAllStr(p);   

    return 0;
}

 

 

posted on 2012-10-04 20:57  _在路上  阅读(408)  评论(2编辑  收藏  举报