Buenas :D
quiero hacer un generador de contraseñas y esto es lo que llevo (las letras no estan todas, cuando terminé el programa pongo las demas)
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int contador=0;
int cifras;
char letras[10] ={'a','b','c','d','e','f','g','h','i','\0'};
cout << "____Generador____" << endl;
cout << "" << endl;
cout << "Cuantas cifras:";
cin >> cifras;
do {
contador++;
}while (cifras >= contador);
return 0;
}
Dentro de la sentecia do while , me gustaría saber como hacer azar con caracteres, se hacerlo con numeros pero no encuentro forma de hacerlo con los caracteres del array letras.
Un salu2!
Un método sencillo y rápido sería calcular el módulo de 26, cuyo resultado sería un entero entre 0 y 25, y luego sumarlo por el carácter 'a':
char mi_letra = (char)(rand() % 26 + 'a');
La explicación es sencilla: 'a' equivale a 97, en el código ASCII, y en total hay 26 letras minúsculas. Si el resultado del módulo fuese 0, la suma sería 97 + 0, o sea, la letra 'a'; si fuese 1 sería 97 + 1 que equivaldría a la letra 'b' y así sucesivamente hasta llegar a 97 + 25 que su resultado sería la 'z'.
En base a esta lógica, puedes aplicarlo para letras mayúsculas y cualquier otro signo.
Me parece una forma interesante de hacerlo, gracias ya lo comprendi :)
De nada ::).
Aqui esta el codigo completo por si a alguien le interesa:
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int contador=0;
int cifras;
int opcion;
cout << "____Generador____" << endl;
cout << "" << endl;
cout << "1-Minusculas" << endl;
cout << "2-Minusculas y Mayusculas" << endl;
cout << "3-Minusculas y Numeros" << endl;
cout << "Numero de Cifras:" << endl;
cin >> cifras;
cout << "Elige una opcion:" << endl;
cin >> opcion;
switch (opcion) {
case 1:
do {
contador++;
char mi_letra = (char)(rand() % 26 + 'a');
cout <<mi_letra;
}while (cifras>= contador);
break;
case 2:
do {
contador++;
char mi_letra2 = (char)(rand() % 26 + 'a');
char mi_letra3 = (char)(rand() % 26 + 'A');
cout << mi_letra2 << mi_letra3;
}while (cifras >= contador);
break;
case 3:
do {
contador++;
char mi_letra4 = (char)(rand() % 26 + 'a');
char mi_letra5 = (char)(rand() % 9 + '0');
cout << mi_letra4 << mi_letra5;
}while (cifras >= contador);
break;
}
return 0;
}
¡Buenas!
No es que tu codigo este mal, pero hay una forma de generar un solo caracter por iteracion para el segundo y tercer caso:
Mayusculas y minusculas
char mi_letra = (char)((rand() % 26 + 'a') + (rand() % 2) * ('A' - 'a'));
Asi si rand() % 2 == 1, generara una mayuscula y si rand() % 2 == 0 sera una letra minuscula.
Minusculas y numeros:
int numero = rand() % 2;
char mi_letra = (char)(rand() % (26 - 16 * numero) + 'a' + numero * ('0' - 'a'));
Si numero == 1, generaras primero un numero aleatorio ente 0 y 9, al que le sumaras 'a' y '0' - 'a', por lo que te generara un digito entre 0 y 9.
Si numero == 0, generaras un numero entre 0 y 25 al que le sumaras 'a' y 0 * ('0' - 'a'), es decir, tendras un caracter entre 'a' y 'a' + 25.
¡Saludos!
Gracias por el detalle ;D