在C语言中,我有一个带有随机数和不带大写字母的字符数组。我需要弄清楚如何生成所有可能的组合,包括大写字母,同时保持数字完整,但我甚至不知道从哪里开始。(例如abc123、abc123、abc123、abc123、abc123、abc123、abc123、abc123、abc123)
最佳答案
实际上,可能是2^n,n表示字符数组中的字母字符数。
为了解决你的问题,我建议你看看recursion,我想这是实现你想做的事情的最简单的方法,你只需要和平常想的有点不同。
编辑:下面是一些实现
void enumerate(char *str, int n)
{
printf("%s\n", str); // Print one solution
while (++n < strlen(str)) // Loop while you don't reach the end
if (str[n] > 96 && str[n] < 123) // Check if str[n] is alphabetic
{
char *tmp = calloc(strlen(str) + 1, sizeof(char));
strcpy(tmp, str); // Create a copy of the initial string
tmp[n] -= 32; // Put tmp[n] = str[n] in uppercase
enumerate(tmp, n); // Call recursion with new string and current position
}
}
你这样称呼它
enumerate("abc123", -1);
结果
abc123
Abc123
ABc123
ABC123
AbC123
aBc123
aBC123
abC123