一尘不染

生成C中长度N以下的所有字符串

algorithm

我自己尝试编码,但失败了。这基本上是我想要的:

a
b
...
z
aa
ba
...
za
ab
bb
...
zz
aaa
baa
...
zzz

最后,它应该生成的每个字符串都短于N个字符,且字符集为az。因此,我不是在寻找 排列 (可以在Internet上找到1001个实现),而是寻找
与替换的组合 (至少在Python中是这样称呼的)。 顺序并不重要 ,速度 至关重要


阅读 273

收藏
2020-07-28

共1个答案

一尘不染

看起来您想要用C语言编写,这是一种实现方法:

#include <stdlib.h>
#include <stdio.h>

int inc(char *c){
    if(c[0]==0) return 0;
    if(c[0]=='z'){
        c[0]='a';
        return inc(c+sizeof(char));
    }   
    c[0]++;
    return 1;
}

int main(void){
    int n = 3;
    int i,j;
    char *c = malloc((n+1)*sizeof(char));
    for(i=1;i<=n;i++){
        for(j=0;j<i;j++) c[j]='a';
        c[i]=0;
        do {
            printf("%s\n",c);
        } while(inc(c));
    }
    free(c);
}
2020-07-28