【发布时间】:2019-09-09 21:17:43
【问题描述】:
我正在尝试获取char* 的所有可能组合。该字符串由四个值组成:两个数字和两个不同字母。例如:
char *text = "01ab";
应该有
所以
我的示例字符串的不同组合,这似乎是正确的(手工完成):
Combinations for values: 0, 1, a, b:
0 0 a b 1 1 a b a 0 0 b b 0 0 a
0 0 b a 1 1 b a a 0 1 b b 0 1 a
0 1 a b 1 0 a b a 0 b 0 b 0 a 0
0 1 b a 1 0 b a a 0 b 1 b 0 a 1
0 a 0 b 1 a 1 b a 1 b 0 b 1 0 a
0 a 1 b 1 a 0 b a 1 b 1 b 1 1 a
0 a b 0 1 a b 1 a 1 0 b b 1 a 0
0 a b 1 1 a b 0 a 1 1 b b 1 a 1
0 b 0 a 1 b 1 a a b 0 0 b a 0 0
0 b 1 a 1 b 0 a a b 0 1 b a 0 1
0 b a 0 1 b a 1 a b 1 0 b a 1 0
0 b a 1 1 b a 0 a b 0 0 b a 1 1
我的方法与我手工操作的方法相同:
获取所有与text 的第一个索引 的组合,然后是text 的第二个索引 的所有组合,依此类推。所以是这样的:
void printPasswordCombinations()
{
char *all_values = "01ab";
int len = strlen(all_values);
char *tmp_pwd = malloc(sizeof(len) * sizeof(char));
for(int i=0 ; i<len ; i++)
{
tmp_pwd[0] = all_values[i];
/* len-1, since the first index is already set. */
for(int j=0 ; j<len-1 ; j++)
{
}
}
printf("%s\n", tmp_pwd);
free(tmp_pwd);
}
现在我有点困惑如何在组合的第一个索引之后继续。所有组合都有several examples,但我的问题似乎有点不同,因为组合中的数字可能相同,只有字母必须不同强>。
如何将所有组合打印到我的控制台? 我实现了一个计算可能组合数量的函数,所以假设这已经完成了。
如果该算法适用于任何数量的numbers 和letters,那就太好了,例如,lenght 6 与four different numbers 和两个different letters 文本的所有组合也可以计算。
语言无关紧要,欢迎任何建议。
【问题讨论】:
-
你的问题的第一个问题在标题中。这些不是“字符指针”的组合,它们是“字符串的*排列”。当您知道搜索关键字时,您将使用 google 找到解决方案。
-
@AnttiHaapala,这个问题不是链接问题的重复。这里的操作是处理多重集的排列。
-
@JosephWood 嗯,对,问题不清楚。正在尝试查找重复项。
-
@MoritzSchmidt - multiset 和 set 的混合排列。
-
@AnttiHaapala,问题标题现在很清楚,而不是链接问题的副本。你会重新提出问题吗?
标签: c arrays algorithm combinations c-strings