c *中所有char *的组合?

问题描述 投票:0回答:1

假设我在C中有以下字符串:

char * str = "1234";

现在我需要所有可能的字母组合:

12
13
14

21
23
24

...

123
124
132
134
142
143

213
214
231
234
241
243
...

412
413
421
423
431
432

我查找了一个解决方案并找到了排列。但排列并不是我想要的。有人有解决这个问题的方法吗?

c algorithm permutation
1个回答
0
投票

虽然没有按字典顺序排序,但以下代码将打印原始字符串中字符的powerset元素的所有排列。

#include <stdio.h>
#include <string.h>

void swap(char* arr, int i, int j) {
    char t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
}

void permute(char *str, int i, int n) {
    for (int j = i; j < n; j++) {
        swap(str, i, j);
        if (!str[i]) {
            printf("%s\n", str);
        } else {
            permute(str, i+1, n);
        }
        swap(str, i, j); 
    }
} 

int main(void) {
    char str[] = "1234";
    permute(str, 0, strlen(str) + 1);
}

使用bell算法,我生成原始字符串中包含空终止符的字符的所有排列。然后我在条件中烘焙,在传递null终止符时打印并中止当前的排列,以防止打印原始字符的相同子集的重复。

© www.soinside.com 2019 - 2024. All rights reserved.