Devo creare un elenco di parole nel seguente modo:
Inserendo una stringa di 7 numeri (possono essere da 2 a 9):
ogni numero corrisponde a 3 o 4 lettere (come sui cellulari).
2: a,b,c
3: d,e,f
ecc...
Devo generare tutte le parole possibili.
Come si fa?

questo è il mio pezzo di codice, ma fatto cosi ma non funziona:

codice:
char **p;
char str[N]="2459867"; //stringa da decodificare

int due,tre,quattro,cinque,sei,sette,otto,nove;
int q,i,j,k;
q=pow(2,7);

//ALLOCO IL VETTORE DI STRINGHE
p=(char**)malloc(sizeof(char*)*q);
for(i=0;i<q;i++){
p[i]=(char*)malloc(sizeof(char)*N);
}

//CREO TUTTE LE POSSIBILI PAROLE
for(i=0;i<q;i++){printf("\n");
for(due=0;due<3;due++){
for(tre=0;tre<3;tre++){
for(quattro=0;quattro<3;quattro++){
for(cinque=0;cinque<3;cinque++){
for(sei=0;sei<3;sei++){
for(sette=0;sette<4;sette++){
for(otto=0;otto<3;otto++){
for(nove=0;nove<4;nove++){
    for(j=0;j<N;j++){

    switch(str[j]){

    case '2':if(due==0)p[i][j]='a';if(due==1)p[i][j]='b';if(due==2)p[i][j]='c';printf("%c",p[i][j]);break;
    case '3':if(tre==0)p[i][j]='d';if(tre==1)p[i][j]='e';if(tre==2)p[i][j]='f';printf("%c",p[i][j]);break;
    case '4':if(quattro==0)p[i][j]='g';if(quattro==1)p[i][j]='h';if(quattro==2)p[i][j]='i';printf("%c",p[i][j]);break;
    case '5':if(cinque==0)p[i][j]='j';if(cinque==1)p[i][j]='k';if(cinque==2)p[i][j]='l';printf("%c",p[i][j]);break;
    case '6':if(sei==0)p[i][j]='m';if(sei==1)p[i][j]='n';if(sei==2)p[i][j]='o';printf("%c",p[i][j]);break;
    case '7':if(sette==0)p[i][j]='p';if(sette==1)p[i][j]='q';if(sette==2)p[i][j]='r';if(sette==3)p[i][j]='s';printf("%c",p[i][j]);break;
    case '8':if(otto==0)p[i][j]='t';if(otto==1)p[i][j]='u';if(otto==2)p[i][j]='v';printf("%c",p[i][j]);break;
    case '9':if(nove==0)p[i][j]='w';if(nove==1)p[i][j]='x';if(nove==2)p[i][j]='y';if(nove==2)p[i][j]='z';printf("%c",p[i][j]);break;

    }

    }
}}}}}}}}