Search code examples
calgorithm

Generate all strings under length N in C


I tried coding this myself and horribly failed. This is basically what I want:

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

In the end it should have generated every string that is shorter then N characters with charset a-z. So I'm not looking for permutations (of which 1001 implementations can be found on the internet), but for combinations with replacement (at least that's how it's called in Python). Order is not important, speed is.


Solution

  • Looks like you want it in C, here is a way to do it:

    #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+1);
        }   
        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);
    }