Ti posto un esempio sul quale puoi lavorare:
codice:
#include <iostream>
void incrementa_contatore (int* array, int size) {
int tmp;
array[size-1]++; // uno scatto
tmp = size-1;
while (array[tmp] == 26) { // faccio scattare i precedenti
array[tmp] = 0;
array[tmp-1]++;
tmp = tmp-1;
}
}
char* genera_stringa_da_array (int* array, int size) {
char* stringa = new char[size];
for(int i = 0; i < size; ++i) {
stringa[i] = 'a' + array[i];
}
return stringa;
}
bool controlla_termine (int* array, int size) {
for(int i = 0; i < size; ++i) {
if(array[i] != 26)
return false;
}
return true;
}
int main(int argc, char const *argv[])
{
char* stringa;
int* array = new int[5];
for(int i = 0; i < 5; ++i) {
array[i] = 0;
}
while (!controlla_termine (array, 5)) {
stringa = genera_stringa_da_array (array, 5);
std::cout << stringa << std::endl;
incrementa_contatore (array, 5);
}
return 0;
}
L'idea che ci sta dietro è quella di non gestire un array di caratteri ma un array di interi. Poi fai corrispondere ad ogni intero una lettera. Se lo metti dentro a un ciclo for per la lunghezza, dovresti riuscire a generare tutte le combinazioni per tutte le lunghezze.
Visto che l'ho scritto un po' di fretta ci potrebbero essere degli errori... Nel caso dimmelo!