[C con Clase] Problemas comparar string con un arreglo

Asituna Bravía asitunabravia en gmail.com
Dom Nov 8 15:36:57 CET 2020


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 <iostream>
#include <string>
#include <random>
#include <fstream>
//#include <stdlib.h>
#include <vector>
#include <cstring>
#include <streambuf>


//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<int>
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<char>(archivoClaves)),
                        std::istreambuf_iterator<char>());

    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" <<std::endl;
            }
            else std::cerr << "Error al abrir el archivo" << std::endl;

        break;
    }

    std::cout << generadorAleatorioId() << std::endl;
}


lista.txt
4CBab8
CbB8D2
bc0ABc
baBCC8
20a26b
b28bD0
aAcAdb
dAcBc2
aD2bAD
0c6b8c
0CaAaa
04cCcd
cb40D6
dBBc2c
bdC4B8
a2dDB2
84dd22
D686aA
4aDdD4
a8066b
6aD4A8
CBd4A6
DB8d46
2Da8Ca
D4CdC4
C8a2c4
dc68AB
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20201108/b14d4fed/attachment.html>


Más información sobre la lista de distribución Cconclase