该题目摘自《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; }