Rubik ha scritto:
Partecipo con un mio codice che genera tutte le password, con lunghezza definita a piacere, ottenibili in un range di caratteri scelto a piacere:
- occhio, gen è una stringa o solo un array di caratteri?
- dal punto di vista logico a quell'if potresti anche abbinare un else break.
@StandardOil
Secondo me risulta più efficiente operare direttamente sugli indici invece che sull' "alfabeto".
Volendo operare con stringhe, il codice postato in precedenza diventerebbe:
#include <stdio.h>
#include <string.h>
#define K 3
int disposizione_R_successiva(unsigned int *u, unsigned int n, unsigned int k)
{
unsigned int i;
for(i = 0; i < k && !(u[i] = (u[i] + 1) % n); ++i);
return i < k;
}
void applica_disposizione_R(char *abc, char *s, unsigned int *u, unsigned int k)
{
for(unsigned int i = 0; i < k; ++i)
{
s[i] = abc[u[k - i - 1]];
}
}
int main()
{
char *abc = "KoALa";
unsigned int n = strlen(abc);
unsigned int u[K] = {0};
char s[K + 1] = {0};
do
{
applica_disposizione_R(abc, s, u , K);
printf("%s\n", s);
}
while(disposizione_R_successiva(u, n, K));
}