我有一个问题,我必须制作一个字符数组,从一个字符开始,在所有字符用完之后,制作2位数字,当它们用完时,制作3位数字等等。所以这里是我是如何做到的:
char myChar = malloc(8);
for (int i = 0; i < 25; i++)
{
mychar[i] = i + 'a';
}
当1个字符用完时,我不知道该去哪里。嵌套for循环?如何加起来?用strcat()?
编辑:对不起,如果我的问题不明确。基本上它是分配一个暴力哈希饼干。我有一部分工作,比较字符串工作,唯一的问题是这件事生成符号。 这是如何工作的 - 我说一句话,发送它有函数并检查结果与目标哈希。如果它们是相同的,瞧。 所以在这里我尝试从1个字符开始创建一个字符数组。 所以我做'a',检查它,如果没有用,我把它改成'b'等等,直到'z'。 当我到'z'时,我希望它以2个字符重新开始,'aa',然后'ab',然后'ac'直到'zz'。当这个用完时我希望它以'aaa'然后'aab'等开始,最多8个数字。 我知道这需要花费大量时间。 但我面临的问题是字符的连接。如何在第一轮写一个循环,它只有一个符号,在第二轮它是两个,依此类推。我希望这能解释一下。答案 0 :(得分:1)
以下代码使用嵌套循环。
外环是无穷无尽的;用你需要的长度的循环替换它。内部循环将字符串更改为下一个字符串:“aa”到ba“,”ba“到”ca“,...,”zz“到”aaa“等。它会更改字符串中的单个字符而不是使用strcat
。
请注意,输出看起来有点落后;我想这不是太糟糕,因为只要你检查所有猜测,检查所有猜测的顺序并不是很重要。
char str[100] = ""; // initialize all characters to '\0'
char min = 'a';
char max = 'z';
for (;;)
{
int i;
int increase_length = 1; // a flag to detect transitions like "zzz" => "aaaa"
for (i = 0; str[i] != '\0'; ++i)
{
if (str[i]++ == max) // change to next character and check whether it was 'z'
{
str[i] = min;
}
else
{
increase_length = 0;
break;
}
}
if (increase_length)
str[i] = min;
puts(str);
}