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:
int complemento =6;
string cadenaDeCaracteres;
string dividir6;
int x = cadenaDeCaracteres.length();
int z =0;
while (z<x)
{
for (int i=0; i<complemento; ++i)
{
dividir6 + cadenaDeCaracteres[i];
}
complemento+=6;
vector.push_back(dividir6);
dividir6="";
++z;
}
int a = vector.size();
while ((vector[a]).size() <6)
{
vector[a].append("0");
}
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.
Te paso una solución que creo que podrás acomodar a tu caso:
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
int main()
{
std::string cadena{ "Una cadena bastante larga que va a ser dividida en segmentos "
"de seis caracteres cada uno, y lo que falte se completara con asteriscos." };
// nuevo size de la cadena (multiplo de 6)
auto res = std::div(cadena.size(), 6LL); // calcula cociente y resto.
size_t newsize = 6LL * res.quot;
newsize += (res.rem) ? 6LL : 0;
cadena.resize(newsize, '*'); // de ser necesario se completa con asteriscos.
// un vector de strings de 6 caracteres cada una:
std::vector<std::string> v;
for (auto i = 0LL; i < newsize / 6LL; ++i) {
v.push_back(cadena.substr(6LL * i, 6LL));
}
// a ver...
for (const auto& i : v) {
std::cout << i << '\n';
}
}
Muchas gracias! Mirare como funciona en profundidad para saber como lo puedo hacer en mi caso.
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.
string cadena_original = "abcde0fghij1kl";
size_t relleno = DIVISOR - (cadena_original.size() % DIVISOR);
for(size_t i = 0; i < relleno; ++i)
cadena_original += '0';
size_t num_subcadenas = cadena_original.size() / DIVISOR;
string *vector_string = new string [num_subcadenas];
for(size_t i = 0; i < num_subcadenas; ++i)
for(size_t j = 0; j < DIVISOR; ++j)
vector_string[i] += cadena_original[i*DIVISOR+j];
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