用C语言编程序输出a,b,ab,c,d,ac,bc,abc,d,ad,bd,cd,abd,acd,

用C语言编程序输出a,b,ab,c,d,ac,bc,abc,d,ad,bd,cd,abd,acd,bcd,abcd,给出字符串"abcd"

atmystate用的是递归方式实现,我用非递归实现如下:

#include <stdio.h>
#include <string.h>
#define STR "abcd" //可以换成abcdef或其他字符,只要不超过8

int main()
{
int i = 0;
int j = 0;
int temp = 0;
char *p = STR;
int len = strlen(STR); //不包括末尾的'\0'
int totalCompose = 2 << (len-1);
printf("totalCompose=%d\n", totalCompose);
for (i = 0; i < totalCompose; ++i)
{
temp = i;
for (j = 0; j < len; ++j)
{
if (temp & 0x1)
printf("%c", p[j]);

temp >>= 1;
}
printf("\n");
}
return 0;
}

追问

那个递归的能输出那么多吗,,我只算出了a,ab,abc,abcd

追答

可以输出那么多。你能算出a,ab,abc,abcd。
这个abcd输出的那层情形是这样的:buf中已经是abc,m已经偏移到d,而n为3,所以buf[3]=*m,buf[3]就为d了,所以这层输出abcd。 然后m++之后,while循环判断m已经为空,跳出到上一层栈。现在来分析上一层栈的情况:
buf中已经为abcd了,n此时为2(因为递归调用下一层时n+1才为3,所以跳回上一层n还是2),而m此时为d,while循环条件为真,buf[n]=*m即为buf[2]='d',buf[n+1]=0,所以buf变为了abd,输出abd,然后,m++后while条件为假,又跳到上一层,此时m还为cd, 而buf为abd,n为1,buf[1]=*m,buf[2]=0,所以buf变为了ac,输出ac,依此类推

追问

可是我用vc++运行不出来,,为什么有错误呀

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-24

void allpos(char* m, char* buf, int n)
{
while (*m)
{
buf[n] = *m;
buf[n+1] = 0;
printf("%s\n", buf);
m++;
allpos(m, buf, n+1);
}
}
int main()
{
char buf[100];
allpos("abcd", buf, 0);
return 0;
}

追问

这个只能输出a,ab,abc,abcd吧?

第2个回答  2015-09-24
用迭代器追问

不知道那是什么东东,,