From asitunabravia en gmail.com Sun Nov 8 15:36:57 2020 From: asitunabravia en gmail.com (=?UTF-8?Q?Asituna_Brav=C3=ADa?=) Date: Sun, 8 Nov 2020 15:36:57 +0100 Subject: [C con Clase] Problemas comparar string con un arreglo Message-ID: Hola buenas, a ver si alguien me ayuda, el programa genera claves aleatorias y luego la compara con las que hay en un archivo, pero estoy teniendo problemas con la salida de la función que genera claves y el arreglo en el que meto las claves guardadas, no se si se compara así, si hay otra forma mejor, el ide me arroja un error de tipo de datos no compatibles, pero en ambos casos se declaran como string, no se me he perdido un poco, alguien que me encauce por el buen camino, y una pregunta, la búsqueda binaria se podría aplicar aquí? por lo que he estudiado la búsqueda binaria se basa en el índice ( bajo alto / 2 ) no sobre el contenido del arreglo, no se tambien me estoy complicando mucho, algo de info, muchas gracias de antemano. contrasena.cpp /* Programa que genera aleatoriamente claves y la compara con una lista.txt. Debe mostrar numero de claves por segundo, tiempo que tarda en encontrarla e itineraciones que ha necesitado. Ademas una vez encontrada guardarla en un archivo. */ #include #include #include #include //#include #include #include #include //Generamos valores aleatorios verdaderos utilizando std::random_device std::string generadorAleatorioId(size_t length = 0) { static const std::string allowed_chars{"24680aAbBcCdD"}; static thread_local std::default_random_engine randomEngine(std::random_device{}()); static thread_local std::uniform_int_distribution randomDistribution(0, allowed_chars.size() - 1); std::string id(length ? length : 6, '\0'); for (std::string::value_type &c : id) { c = allowed_chars[randomDistribution(randomEngine)]; } return id; } // Funcion calcular claves por segundo // Funcion calcular tiempo desde que empieza hasta que la encuentra /* Numero de itineraciones que ha necesitado unsigned int itineracionesN = 0; ++itineracionesN; */ int main(int argc, char **argv) { //Leemos el archivo y lo cargamos dentro de un vector std::ifstream archivoClaves("lista.txt"); std::string vClaves((std::istreambuf_iterator(archivoClaves)), std::istreambuf_iterator()); vClaves.c_str(); for (unsigned int a = 0; a < sizeof(vClaves) / sizeof(vClaves[0]); a = a + 1) { std::cout << vClaves[a] << std::endl; } // Bucle infinito while (true) { int idClave = -1; std::string salida; std::string generadorAleatorioId() = salida; for (int a = 0; a < vClaves; a++) { const char *p_vClaves = vClaves[a]; for (char *p_ClaveGenerada = salida; *p_vClaves == *p_ClaveGenerada && *p_vClaves; ++p_vClaves, ++p_ClaveGenerada) ; if (!*p_vClaves) idClave = i; } if (idClave >= 0) std::cout << "\nClave " << vClaves[idClave] << " encontrada\n"; // Si la encuentra la guarda en el archivo std::ofstream fichero("encontrada.txt"); if ( fichero.is_open() ) { fichero << generadorAleatorioId() << "\n" <