es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo arreglar este programa de encriptación?

Tengo un programa de cifrado en C# que estoy haciendo para una clase, y solo necesito un poco de ayuda con algo.

Siempre que está cifrando algo que debería convertirse en una ‘Z’, se convierte en un ‘@’. No estoy seguro(a) de por qué sucede esto.

¿Podría alguien ayudarme con esto?

            char clave;
            int desplazamiento = 0;
            string textoClaro = string.Empty;
            Console.WriteLine("Ingrese su clave de cifrado en mayúsculas:");
            clave = Convert.ToChar(Console.ReadLine());
            desplazamiento = clave - 'A';
            // Console.WriteLine("desplazamiento = {0}", desplazamiento);
            Console.WriteLine("Ingrese su texto en letras mayúsculas:");
            textoClaro = Console.ReadLine();
            foreach (char ch in textoClaro)
            {
                if (Char.IsUpper(ch))
                {
                    if (Convert.ToChar(ch + desplazamiento) < 'Z')
                        Console.Write(Convert.ToChar(ch + desplazamiento));
                    else Console.Write(Convert.ToChar(ch + desplazamiento - 26));
                }
                else if (ch == ' ')
                    Console.Write(' ');
Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar en cómo el programa maneja el carácter ‘Z’. En el bucle foreach, si el carácter es mayúscula, verifica si agregar el cambio al valor ASCII del carácter resultaría en un carácter menor que ‘Z’. Si es así, se emite ese carácter. Sin embargo, si el carácter es ‘Z’ o mayor, se resta 26 del valor ASCII desplazado para volver al comienzo del alfabeto mayúscula.

    El problema es que ‘Z’ tiene un valor ASCII de 90, que es menor que ‘Z’ + shift si shift es mayor que 1. Por lo tanto, el programa emite el valor ASCII de ‘Z’ + shift como un carácter diferente, que resulta ser ‘@’ para valores de cambio mayores que 1.

    Para solucionar este problema, puedes modificar la instrucción ‘if’ para manejar caracteres mayúsculas para verificar si el valor desplazado es menor o igual a ‘Z’ en lugar de simplemente ser menor. Aquí te mostramos cómo puedes modificar el código:

    foreach (char ch in clearText)
    {
        if (Char.IsUpper(ch))
        {
            char shiftedChar = Convert.ToChar(ch + shift);
            if (shiftedChar <= 'Z')
                Console.Write(shiftedChar);
            else
                Console.Write(Convert.ToChar(shiftedChar - 26));
        }
        else if (ch == ' ')
            Console.Write(' ');
    }
    

    Con esta modificación, el programa emitirá ‘Z’ como ‘Z’ en lugar de ‘@’.

Comments are closed.