【发布时间】:2011-09-16 07:40:56
【问题描述】:
我正在尝试使用 C 打印字符串 'abc' 的所有可能组合。有人可以帮助指出我在这段代码中哪里出错了吗?我正在使用这里提到的算法: http://hackercs.com/videos/Combinations-of-a-String-Part-2/ 感谢您的时间和帮助。 (顺便说一句,目标是在这里使用递归)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void combination(char **curString,int allowedStart,char **outBuffer,int length)
{
//check for allowed chars.
// if not return.
// else
// for each char in the allowed char
// copy into buffer
//print buffer
//combine buffer and over next allowed chars
//remove from buffer.
if (allowedStart == length)
return;
else
{
int curr;
for (curr = allowedStart;curr<length; curr++){
//need to copy 'a' into outbuffer and keep appending to outbuffer.
printf("allowedStart = %d\n",allowedStart);
printf("curr = %d\n",curr);
(*outBuffer)[curr] = (*curString)[allowedStart];
printf("outbuff is %s\n",*outBuffer);
combination(curString,curr+1,outBuffer,length);
printf("return\n");
(*outBuffer)[length-1] = '\0';
} //else
} //for
}
main()
{
char *var = "abc";
int length = strlen(var);
printf("length = %d\n",length);
char *outBuffer = malloc ( length * sizeof (char));
bzero(outBuffer,3);
combination(&var,0,&outBuffer,length);
}
【问题讨论】:
-
你可能想修正你的代码格式 - 否则很难阅读。
-
那么它有什么问题呢?我不想为了弄清楚这一点而自己运行代码,你也不应该期望我们也这样做。
-
输出是a,ab,abc,abb,aa,aac,aaa 所以它经过第一次迭代,在失败前打印了几个组合。
-
这是作业吗?如果是,请标记它
-
没有。只是想更好地学习递归。我知道这段代码在 Java 中非常容易编写,但我只是想提高我的 C 技能。