c - 从输入的字符数组中查找所有可能的单词(排列)

标签 c arrays recursion permutation

阅读了几篇文章后,我仍然对排列和递归函数感到困惑。我正在尝试在不等长的二维数组中创建所有可能的 3 字母字符排列,其中第一个字母来自集合 {'l', 'm', 'n'},第二个字母来自集合 {'q ', 'r'} 第三个字母来自集合 {'a', 'e', 'i', 'o'}。我的代码通过了正确的排列模式,但没有打印出正确的输出。例如,如果前 8 个排列应该是:

lqa
lqe
lqi
lqo
lra
lre
lri
lro

我的代码打印出来:

lqa
e
i
o
ra
e
i
o

关于问题是什么的任何想法?以下是我的代码的相关部分:

rec(character_pools,0,3);
void rec(char** pool, int k, int j)
{
    if(k==j)
    {
        printf("\n");
        return;
    }
    int i,len=strlen(pool[k]);
    for (i=0;i<len;i++)
    {
        printf("%c",pool[k][i]);
        rec(pool,k+1,j);
    }
}

最佳答案

这最终对我有用!谢谢@Tsukuyo 的提示。如果我想在排列中找到字符串的第 n 个索引,我需要问一个单独的问题吗?

void rec(char** pool, int k, int j, char* cur, int counter)
{
    if(k==j)
    {
        cur[k]=0;
        printf("Recursive call #%d %s\n",counter,cur);
        return;
    }
    int i,len=strlen(pool[k]);


    for (i=0;i<len;i++)
    {
        cur[k]=pool[k][i];
        rec(pool,k+1,j,cur,counter++);
    }
}

关于c - 从输入的字符数组中查找所有可能的单词(排列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18928778/

相关文章:

java - 两个大数相加 pt.2

javascript - 我如何在 javascript 上正确使用递归来制作车牌?

java - 在循环内添加数组元素

algorithm - 查找特定位置不变的字符串的所有排列

c - C 中的 tolower 函数不允许我转换字符串

c - 64 位比较和交换 (CAS) 应该在 32 位机器上工作吗? (或 64 位机器?)

c - 添加到链表的头部

c - 扩展二维矩阵

java - 递归时保留变量值

java - 链表串联