我的作业要求我编写一个程序,从终端(argc 和 argv)获取字符串并打印所有可能的排列。我曾尝试使用堆的算法,但它似乎并没有奏效。下面是我的功能。
char **getPermutation(char * in)
{
//n is the size of the input string.
int n = strlen(in);
int count[n];
int counter= 0;
char copy[n];
char **permutations = malloc(sizeof(char*)*(factorial(n)));
permutations[0] = in;
strcpy(in, copy);
counter++;
for( int i = 1; i < n;)
{
if (count[i] < i){
if (i%2==0){
swap(&in[0],&in[i]);
}
else
{
swap(&in[count[i]],&in[i]);
}
permutations[counter] = in;
strcpy(in, copy);
counter++;
count[i]++;
i = 1;
}
else
{
count[i] = 0;
i++;
}
}
return permutations;
}
该函数必须返回指向指令指定的字符指针的指针。这也是为什么有这么多变量的原因(虽然,我不太确定如何处理字符串的副本。我很确定我需要它)。测试表明程序会循环,通常会循环太多,最终会遇到段错误。看起来交换后的字符串并没有将其放入返回的数组中。