我有一個程序,我正在編寫它必須遍歷所有可能的字符串到n的大小。這是它的代碼。循環遍歷所有可能的字符串的長度n
int len, endlen = atoi(argv[2]);
int i, j, k;
f = fopen(argv[1], "wb");
for (len = 0; len < endlen; len++)
{
for (i = 0; i < len; i++)
{
for (k = 32; k < 127; k++)
{
entry.len = len;
string[i] = k;
memcpy(entry.string, string, 65);
sha256(string, entry.outbuf, len);
fwrite(&entry, sizeof(struct hashentry), 1, f);
fflush(f);
}
}
printf("\rLength done: %d of %d", len, endlen);
fflush(stdout);
}
它只是修改字符串的一個索引而回來。它需要做很多事情就像在二進制計數..
000
001
010 <--It moved over
011 <--Now it modified the previous one
100 <--moved again
101 <--Modifying previous
110
111 <--...etc
任何幫助嗎?
*編輯:我需要的是能給我所有字符串從size = 1到size = endlen的東西。這就像
"a"
"aa"
"aaa"
"aaaa"
"aaaaa"
or
"a"
"b"
"c"
...
"aa"
"ab"
"ac"
...
"aaaaa"
"aaaab"
"aaaac"
...
"abcde"
您會得到什麼輸出? – suspectus
你的問題不清楚 – exexzian
如果你計算你的兩個iner loop,你只能得到len * 96的迭代次數。這太低了,無法獲得所有96^len的組合。 你需要len嵌套循環(或等價的東西,最有可能是一個遞歸函數)通過所有的組合。順便說一下,這很快就會變成一個令人憤慨的數字(在endlen 9中,你會得到幾十萬億字符串)。 – lrn