-1

我有一个问题,我必须制作一个字符数组,从一个字符开始,在所有字符用完后,制作 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位数。我知道这将花费大量时间。但我面临的问题是字符的串联。我如何编写一个循环,所以在第一轮它只有一个符号,在第二轮它是两个,依此类推。我希望这能解释一下。

4

1 回答 1

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);
}
于 2012-11-20T19:07:38.783 回答