2012-04-15 112 views
-1

有人可以帮助我得到一个C算法来生成长度为n的所有字母组合吗?生成所有字母组合

我需要的输出是这样的:

aaaaaaa 
aaaaaab 
aaaaaac 
. 
. 
. 
zzzzzzx 
zzzzzzy 
zzzzzzz 



for(i = 0; i<length; i++){ 
    pass[i] = 'a'; 
} 

while(1){ 
    for(j=0;j<26;j++){ 
     printf("%s\n",pass); 
     pass[i] = (char)(pass[i]+1); 
    } 
    if(pass[i-1]==z)... 
} 
return 0; 
+0

我已经试过了问题......这不是学校里的功课,这只是一个爱好项目。 – Mitchell 2012-04-15 04:55:07

+0

“我试过这个问题......” - 然后显示一些代码.... – 2012-04-15 04:55:36

+0

#include int main(void){ \t int length = 7; \t char pass [length + 1]; \t int i = 0,j = 0; (i = 0; i Mitchell 2012-04-15 04:56:01

回答

4

下面是一个使用递归版本:

#include <stdio.h> 
#include <string.h> 

void iterate(char *str, int idx, int len) { 
    char c; 

    if (idx < (len - 1)) { 
     for (c = 'a'; c <= 'z'; ++c) { 
      str[idx] = c; 

      iterate(str, idx + 1, len); 
     } 
    } else { 
     for (c = 'a'; c <= 'z'; ++c) { 
      str[idx] = c; 

      printf("%s\n", str); 
     } 
    } 
} 

#define LEN 3 

int main(int argc, char **argv) { 
    char str[LEN + 1]; 

    memset(str, 0, LEN + 1); 

    iterate(str, 0, LEN); 
} 
0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int isFinish(char *str){ 
    return '\0'== str[strspn(str, "z")]; 
} 

void inc_str(char *str){ 
    int index, carry; 
    for(index = strlen(str)-1;index>=0;--index){ 
     if(str[index] == 'z'){ 
      carry = 1; 
      str[index] = 'a'; 
     } else { 
      carry = 0; 
      str[index] += 1; 
     } 
     if(carry == 0)break; 
    } 
} 

int main(){ 
    int n; 
    char *str; 

    n=7;//length 
    str=(char*)malloc(sizeof(char)*(n+1)); 
    //initialize 
    memset(str, 'a', n);//"aa..aa" 
    str[n]='\0'; 

    while(1){ 
     printf("%s\n", str); 
     if(isFinish(str)) 
      break; 
     inc_str(str); 
    } 
    free(str); 
    return 0; 
}