2013-12-16 241 views
1

我需要遍历从aaaaaaaa到zzzzzzzz的一系列8个字符的字符串,类似于蛮力攻击。现在,我有嵌套循环以下乌七八糟做到这一点:划分关键字搜索

int start = 97; 
int range = 25; 
int a; 
for(a = start; a <= start+range; a++) { //1 
    strb[0] = a; 
    for(b = start; b <= start+range; b++) { //2 
     strb[1] = b; 
    for(c = start; c <= start+range; c++) { //3 
      strb[2] = c; 
      for(d = start; d <= start+range; d++) { //4 
       strb[3] = d; 
       for(e = start; e <= start+range; e++) { //5 
        strb[4] = e; 
        for(f = start; f <= start+range; f++) { //6 
         strb[5] = f; 
         for(g = start; g <= start+range; g++) { //7 
          strb[6] = g; 
          for(h = start; h <= start+range; h++) { //8 
           strb[7] = h; 
           check(str); 
          tot++; 
          } 
         } 
        } 
       } 
      } 
     } 
    } 
} 

尽管此代码非常适用于整套的搜索空间,我也需要划分成小片搜索,以使用多个线程执行并发搜索操作。例如。我希望能够搜索搜索空间的第三个1/25,或者说,第二个1/15。

我需要以某种方式展开这个嵌套循环到一个来实现,但我无法弄清楚如何。我使用C.任何帮助表示赞赏,在此先感谢。

+0

为了避免“可怕的嵌套循环混乱”学习递归程序。 – EoiFirst

+0

为了避免递归编程,学习如何将它变成一个循环。理解for循环比递归更容易,并且更容易使用资源。 –

回答

4

你需要的就是这样的字母顺序工作的一个迭代器,它是这样的:

calculateNext(char strb[8]){ 
int i; 
    for(i=7; i<=0; i++){ 
    if(strb[i]<'z'){ 
     strb[i]++; 
     break; 
    } else { 
     strb[i]='a'; 
     strb[i-1]++; 
    } 
    } 
} 

我不知道这工作完全,但总的想法是,当最后一个元素为z ,然后求和下一个,如果不是,则求和并迭代。