Codificador [C++]

Iniciado por ianmorar03, 7 Agosto 2017, 08:02 AM

0 Miembros y 1 Visitante están viendo este tema.

ianmorar03

Buenas!
Vengo otra vez a molestar como siempre jaja, he estado haciendo un pequeño programa en C++ que me codifique una palabra, lo estoy haciendo con vectores, un vector para el alfabeto y otro para la clave, ejemplo:

vector del alfabeto:
A B C D E...
0 1 2 3 4...

vector para la clave:
! 2 6 & $...
0 1 2 3 4...

Pero a la hora de codificar no se como hacer el método que haga la tarea, dejo un ejemplo:

palabra a codificar:
C A E
0 1 2

resultado:
6 ! $
0 1 2
ocupo que me imprima la palabra codificada, si serian tan amables de explicarme solo el metodo para codificar ;D

Aquellos que estan locos como para pensar que pueden cambiar el mundo , son los que lo hacen.

ivancea96

#1
Hay infinitos métodos para codificar. Usa el que quieras, haz lo que quieras con lo cual la palabra se quede cifrada y sea decodificable luego.

Si la pregunta es acerca de algún método famoso, pues, tienes el método XOR, que no es más que utilizar el operador XOR con cada par de caracteres de la palabra a cifrar y de la clave:
Código (cpp) [Seleccionar]
char cifrado = texto[i] ^ clave[i];
Dadas las propiedades del XOR, la decodificación es exactamente el mismo paso: aplicar el XOR de nuevo.
https://es.wikipedia.org/wiki/Cifrado_XOR

Luego, tienes otros 2 conocidos, el cifrado César y el cifrado Vigenère. En el César, la clave es 1 letra. En el Vigenère, un conjunto de letras (recalco letras porque no se puede hacer con símbolos).
El Vigenère es exactamente lo mismo que el César, solo que vas cambiando la letra.

Estos no los explico, te queda a ti descubrirlos :p
https://es.wikipedia.org/wiki/Cifrado_C%C3%A9sar
https://es.wikipedia.org/wiki/Cifrado_de_Vigen%C3%A8re


Edito:
Ah, que ya tienes el método para codificar xD

MAFUS

strchr es la función que buscas. Devuelve la posición de memoria de la primera aparición de un carácter en una cadena.

Sea ABCDE... tu cadena base, la que te dará el índice según el carácter actual de tu cadena a codificar.
Sea !26&$... tu cadena código que tiene los caracteres codificados.
Debes pasarle a strchr dicha cadena base y el susodicho carácter, entonces strchr te devolverá una posición de memoria del mismo carácter dentro de la cadena base.
Haciendo uso de la aritmética de punteros debes restar dicha posición de memoria con la dirección de la misma cadena base. Esto te dará un número natural. A este número natural, que deberás hacer un cast a size_t para que el compilador no se queje, se lo das como índice a la cadena código.
En este momento ya tienes el carácter codificado.

ianmorar03

#3
 @MAFUS , @ivancea96 muchas gracias por sus aportes, me sirvieron mucho!
Pero decidi hacerlo diferente:
Código (cpp) [Seleccionar]

cout << "Inserte la palabra que quiera codificar > ";
string palabraCod;
char cadena[50];
getline(cin, palabraCod);
cout << palabraCod;
int len = palabraCod.length();
cout << "\nEl tamanio de la palabra es: " << len << endl;
for (int i = 0; i < palabraCod.length(); i++) {
    cadena[i] = palabraCod[i];
    cout << cadena[i];
}
cout << endl;
int letrasEncontradas[50];
for (int j = 0; j < len; j++) {
for (int k = 0; k < 27; k++) {
if (cadena[j] == alfabeto[k]) {
letrasEncontradas[j] = k+1;
palabra[j] = clave[k];
cout << clave[k];
}
}
}
Aquellos que estan locos como para pensar que pueden cambiar el mundo , son los que lo hacen.