//原理是插入, 在一个字符串的所有位置插入新字符. //如: AB 插入C , 位置有 1A2B3, 插入后形成 CAB ACB ABC
char *AllList(char *str, int *pNum) { int i, j, k, n; int len = strlen(str); int Total = 0; int count, oldcount; int size; char *Buf; char *p, *p1;
if (len > 10) return NULL;
//计算总的组合数目 for (i = 0, j = 1; i < len; i++) { j *= (len - i); Total += j; }
//创建二维数组, 存放全部组合 size = len + 1; if ((Buf = (char *)malloc(Total * size)) == NULL) { return NULL; }
for (k = 0, count = 0; k < len; k++) //所有要插入的字符 { oldcount = count; p = Buf; p1 = Buf + count * size; for (i = 0; i < oldcount; i++, p += size) //插入到所有字符串中,形成新的字符串 { n = strlen(p); for (j = 0; j <= n; j++, count++, p1 += size) //在字符串所有位置插入 { memcpy(p1, p, n); p1[n] = p1[j]; p1[j] = str[k]; p1[n + 1] = ’ |