制作一系列字符

时间:2012-11-20 17:15:24

标签: c

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

1 个答案:

答案 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);
}