Estoy escribiendo un programa para resolver un código aleatorio. (El código no tendrá letras mayúsculas, ninguna forma de signos como punto final) El código usa el cifrado de cambio sin conocer la clave, también puede cifrar el código, pero trabajaré en eso. uno más tarde. Por ahora, estoy tratando de generar los 25 resultados primero.
Sin embargo, si ingreso cosas como "espalda con espalda", generará un signo de interrogación al final.
Aquí está mi código
#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char code[400]; char after[400]; // variable initialization int i, x, choice, z, temp, y; printf(" Welcome\n"); printf("Enter your code here:\n"); scanf("%[^'\n']s", code); printf("Press 1 to Decrypt\nPress 2 to encrypt\nPress 3 to Exit\n"); scanf("%d", &choice); // case 1 is decryption switch (choice) { case 1: for (x = 1; x <= 25; x++) { for (i = 0; (i <= 400 && code[i] != 0); i++) // for loop { if (code[i] == 32) { // 32 means space in ascii code after[i] = 32; continue; // if there is a space it will continue } if (code[i] + x > 122) { // 122 is z in ascii code after[i] = code[i] + x; // if it is higher than 'z' after[i] = (after[i] - 122) + 96; // it start counting form 'a' continue; } else { after[i] = code[i] + x; // if nothing is wrong,it starting adding the key } } printf("After decrypting:%s\n", after); printf("%s\n", code); } break; // case 2 is ecnrypt so its not important case 2: x = 5; for (i = 0; (i <= 400 && code[i] != 0); i++) // for loop { if (code[i] == ' ') { continue; } if (code[i] + x > 122) { code[i] = code[i] + x; code[i] = (code[i] - 122) + 96; continue; } else { code[i] = code[i] + x; } } printf("After decrypting:%s", code); break; // not important as well case 3: printf("GOODBYE"); break; // not important as well default: printf("Errors"); return 0; } }Para resolver un cifrado de desplazamiento, todo lo que necesita es un diccionario y las primeras diez palabras más o menos de su texto cifrado. Pruebe todas las posibilidades y pruebe cada palabra de texto simple "descodificada" con su diccionario. Elija el cifrado con la tasa de coincidencia más alta.
Se olvidó de anular la terminación after .
Quizás deberías hacer:
for (i = 0; (i <= 400 && code[i] != 0); i++) { if (code[i] == 32) { after[i] = ... } else if (code[i] + x > 122) { after[i] = ... } else { after[i] = ... } } after[i] = '\0'; // <-- This line is missing. printf("After decrypting:%s\n", after); printf("%s\n", code);