fork download
  1. #include <iostream>
  2. #include <sstream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. string abecedario = "abcdefghijklmnopqrstuvwxyz0123456789 "; //la cadena que almacena el abecedario predeterminado
  10. cout << abecedario.length();
  11. string mensaje; //la cadena que almacenara el mensaje
  12.  
  13. cout << "Ingrese el mensaje: " << endl;
  14. getline(cin, mensaje); //usamos el comando getline para ingresar el mensaje para tener el espacio tambien
  15.  
  16. int tam = mensaje.length();
  17. srand(time(NULL));
  18.  
  19. vector <int> posiciones; //Esta cadena son las posiciones de las letras para tener, despues, el mensaje cifrado
  20.  
  21. for (int i = 0;i < tam;i++) {
  22. posiciones.push_back(rand()%37);
  23. }
  24. cout << "Estas son las posiciones: " << endl;
  25. for (int i = 0; i < tam; i++) {
  26. cout << posiciones[i] << " " ;
  27. }
  28. cout << endl;
  29. string clave = ""; //la clave del string la iniciamos en una cadena vacia
  30.  
  31. for (int i = 0;i < tam;i++) {
  32. clave += abecedario[posiciones[i]];
  33. }
  34. cout << "La clave es: " << endl << clave << endl;
  35.  
  36. int* arrow = new int[tam]; //creamos un arreglo de enteros para almacenar
  37. for (int i = 0;i < tam;i++) {
  38. int n1;
  39. int n2;
  40. for (int k = 0; k < abecedario.size();k++) {
  41. if (abecedario[k] == mensaje[i]) { // recorremos el abecedario y recorremos los valores hasta que este sea igual a mensaje sub i
  42. n1 = k; // si la anterior condicion es verdadera igualamos n1 a esa parte de la cadena
  43. }
  44. }
  45. for (int t = 0; t < abecedario.size();t++) {
  46. if (abecedario[t] == clave[i]) { // usamos la misma iteracion anterior, pero en vez de mensaje sub i, lo comparamos con clave sub i
  47. n2 = t; // esta vez si la condicion se cumple igualamos n2 a esa parte de la cadena
  48. }
  49. }
  50. if (n1 + n2 < 37) {
  51. arrow[i] = (n1 + n2);// almacenamos la suma de n1 y n2 en arrow
  52. }
  53. else {
  54. arrow[i] = (n1 + n2) - 37;
  55. }
  56. }
  57.  
  58. string mensajeCifrado = ""; // creamos un string para almacenar el mensaje cifrado
  59.  
  60. for (int i = 0;i < tam;i++) {
  61. int l = arrow[i]; // igualamos una variable l a arrow sub i
  62. mensajeCifrado = mensajeCifrado + abecedario[l]; // almacenamos en mensajeCifrado el caracter abecedario sub l
  63. }
  64. cout << "El mensaje cifrado es: " << endl;
  65. cout << mensajeCifrado;
  66. string mensajeNuevo = "";
  67. for (int i = 0; i < mensajeCifrado.length();i++) {
  68. int pos1;
  69. pos1 = abecedario.find(mensajeCifrado[i]) - abecedario.find(clave[i]);
  70. if (pos1 < 0) {
  71. mensajeNuevo = mensajeNuevo + abecedario[pos1+37];
  72. }
  73. else{
  74. mensajeNuevo = mensajeNuevo + abecedario[pos1];
  75. }
  76. }
  77. cout << endl << "Este es el mensaje: " << endl;
  78. cout << mensajeNuevo;
  79. }
Success #stdin #stdout 0s 4396KB
stdin
abcdefghijklmnopqrstuvwxyz0123456789 z
stdout
37Ingrese el mensaje: 
Estas son las posiciones: 
21 16 27 26 16 25 32 32 35 7 14 32 18 35 7 7 5 12 23 29 11 21 17 32 17 28 12 32 5 8 0 4 2 27 30 18 30 3 
La clave es: 
vq10qz669ho6s9hhfmx3lvr6r2m6fiaec14s4d
El mensaje cifrado es: 
vr33u4bcgqyg4lvwv3el5fcseqbw7a498x1q32
Este es el mensaje: 
abcdefghijklmnopqrstuvwxyz0123456789 z