Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: @XSStringManolo en 29 Mayo 2019, 00:17 am



Título: Ayuda con funcion con vector.
Publicado por: @XSStringManolo en 29 Mayo 2019, 00:17 am
Hola tengo un string que me tiene almacenada una cadena con varios caracteres.
Quiero tomar los caracteres de 6 en 6 y almacenar cada grupo de 6 caracteres en un vector de strings.
Quedandome vector[0] 6 caracteres, vector[1] 6 caracteres...
Si la cantidad de caracteres del string no es divisor de 6 puede que me quede por ejemplo en
vector[5] 2 caracteres. Entonces en ese caso debo rellenar ese ultimo string dentro del vector para que contenga 6 caracteres. Lo estoy intentando hacer de varias maneras distintas y de ninguna lo logro.
Esto es lo que estoy haciendo ahora y tampoco me fuciona:

Código
  1. int complemento =6;
  2. string cadenaDeCaracteres;
  3. string dividir6;
  4. int x = cadenaDeCaracteres.length();
  5. int z =0;
  6.  
  7. while (z<x)
  8. {
  9.   for (int i=0; i<complemento; ++i)
  10.   {
  11.   dividir6 + cadenaDeCaracteres[i];
  12.   }
  13.   complemento+=6;
  14.   vector.push_back(dividir6);
  15.   dividir6="";
  16. ++z;
  17. }
  18.  
  19. int a = vector.size();
  20.  
  21. while ((vector[a]).size() <6)
  22. {
  23. vector[a].append("0");
  24. }
  25.  

Ya me estoy liando la cabeza, me da errores de varias formas distintas.
estuve a prueba y error y no consegui sacar una funcion que haga lo que pido.
Es para un cifrado de binario a base64.
Gracias.


Título: Re: Ayuda con funcion con vector.
Publicado por: Loretz en 29 Mayo 2019, 08:16 am
Te paso una solución que creo que podrás acomodar a tu caso:

Código
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <cstdlib>
  5.  
  6. int main()
  7. {
  8.    std::string cadena{ "Una cadena bastante larga que va a ser dividida en segmentos "
  9.                        "de seis caracteres cada uno, y lo que falte se completara con asteriscos." };
  10.  
  11.    // nuevo size de la cadena (multiplo de 6)
  12.    auto res = std::div(cadena.size(), 6LL); // calcula cociente y resto.
  13.    size_t newsize = 6LL * res.quot;
  14.    newsize += (res.rem) ? 6LL : 0;
  15.    cadena.resize(newsize, '*'); // de ser necesario se completa con asteriscos.
  16.  
  17.    // un vector de strings de 6 caracteres cada una:
  18.    std::vector<std::string> v;
  19.    for (auto i = 0LL; i < newsize / 6LL; ++i) {
  20.        v.push_back(cadena.substr(6LL * i, 6LL));
  21.    }
  22.  
  23.    // a ver...
  24.    for (const auto& i : v) {
  25.        std::cout << i << '\n';
  26.    }
  27. }


Título: Re: Ayuda con funcion con vector.
Publicado por: @XSStringManolo en 29 Mayo 2019, 08:22 am
Muchas gracias! Mirare como funciona en profundidad para saber como lo puedo hacer en mi caso.


Título: Re: Ayuda con funcion con vector.
Publicado por: K-YreX en 29 Mayo 2019, 08:53 am
Estaba mirando el problema antes de ver la respuesta anterior así que te dejo una alternativa a la de @Loretz con los operadores más básicos y con arrays dinámicos.
Código
  1. string cadena_original = "abcde0fghij1kl";
  2. size_t relleno = DIVISOR - (cadena_original.size() % DIVISOR);
  3. for(size_t i = 0; i < relleno; ++i)
  4. cadena_original += '0';
  5.  
  6. size_t num_subcadenas = cadena_original.size() / DIVISOR;
  7. string *vector_string = new string [num_subcadenas];
  8.  
  9. for(size_t i = 0; i < num_subcadenas; ++i)
  10. for(size_t j = 0; j < DIVISOR; ++j)
  11. vector_string[i] += cadena_original[i*DIVISOR+j];


Título: Re: Ayuda con funcion con vector.
Publicado por: @XSStringManolo en 29 Mayo 2019, 09:36 am
Me va perfecto YreX-DwX muchas gracias. Ahora solo me falta pasar los binarios a base 64. Cuando acabe el codigo lo comparto, aunque supongo que hay muchos por ahí. Los que yo vi no los entendia demasiado.

Edit: Poca operacion mucho texto plano. Jaja
https://pastebin.com/KRPnJ1gB