让我说我在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
我查找了一个解决方案,并找到了排列。但是排列不是我想要的。 有人可以解决这个问题吗?
答案 0 :(得分:0)
虽然未按字典顺序排序,但以下代码将打印原始字符串中字符的幂集的所有排列。
#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);
}
使用响铃算法,我生成了原始字符串中所有字符的排列,包括空终止符。然后,我烘烤一个条件,该条件将在传递空终止符时打印并中止当前排列,以防止打印与原始字符相同子集的副本。