Добавить букву "ё" в шифр Цезаря - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Есть программа которая шифрует и дешифрует текст шифром Цезаря. Но в ее алфавит не включена буква "ё". Можно ли ее туда добавить и если можно, то как? Спасибо.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace Shifrovanie_Cezar
{
    class Program
    {
        static void Main()
        {
            //Цикл для повтора задачи
            do
            {
                string path = @"D:\Test.txt";
                //Переменная выбора шифрования/дешифрования
                uint k = 0;
                //Строка, к которой применяется шифрованияе/дешифрование
                string[] g = {""} ;
                //Строка - результат шифрования/дешифрования
                string result = "";
                //Величина сдвига при шифровании/дешифровании
                uint shift;
                //Вывод сообщения на экран
                Console.WriteLine("Введите 1 для шифрования или 2 для дешифрования");
                //Считывание переменной выбора, пока она не станет равной 1 или 2
                while ((k != 1) && (k != 2))
                {
                    //Считывание переменной k, если введенные данные имеют тип uint
                    uint.TryParse(Console.ReadLine(), out k);
                    //Вывод сообщения об ошибке, если k != 1 или k != 2
                    if ((k != 1) && (k != 2))
                        Console.WriteLine("Ошибка ввода, повторите попытку");
                }
                //Вывод сообщения на экран
 
                Console.WriteLine("Введите величину сдвига");
                //Считывние величины сдвига
                while (!uint.TryParse(Console.ReadLine(), out shift))
                {
                    //Если введена неверная величина сдвига (отрицательное число, или не число)
                    Console.WriteLine("Ошибка ввода, повторите попытку");
                }
 
                //Если величина сдвига больше длины алфавита кирилицы
                if (shift > 32)
                    shift = shift % 32;
 
                //Если выбрано шифрование
                if (k == 1)
                {
                    //Вывод сообщения на экран
                    Console.WriteLine("Строка считывается из файла!");
                    //Считывание строки
                    string s = File.ReadAllText(path, Encoding.Default);
                    //Выполение шифрования

                    //Цикл по каждому символу строки
                    for (int i = 0; i < s.Length; i++)
                    {
                        //Если не кириллица
                        if (((int)(s[i]) < 1025) || ((int)(s[i]) > 1105))
                            result += s[i];
                        //Если буква является строчной
                        if ((Convert.ToInt16(s[i]) >= 1072) && (Convert.ToInt16(s[i]) <= 1105))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if (Convert.ToInt16(s[i]) + shift > 1105)
                                //Добавление в строку результатов символ
                                result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 33);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
                        }
                        //Если буква является прописной
                        if ((Convert.ToInt16(s[i]) >= 1040) && (Convert.ToInt16(s[i]) <= 1025))
                        {
                            //Если буква, после сдвига выходит за пределы алфавита
                            if (Convert.ToInt16(s[i]) + shift > 1025)
                                //Добавление в строку результатов символ
                                result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 33);
                            //Если буква может быть сдвинута в пределах алфавита
                            else
                                //Добавление в строку результатов символ
                                result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
                        }
                    }
                    //Вывод на экран зашифрованной строки
                    Console.WriteLine("Строка успешно зашифрована!");
                    Console.WriteLine(result);
                
                }
                //Если было выбрано дешифрование
                if (k == 2)
                {
                    //Вывод сообщения на экран
                    Console.WriteLine("Строка считывается из файла!");
                    //Считывание строки
                    g = File.ReadAllLines(path, Encoding.Default);
                  
                    //Выполение дешифрования
                    Console.WriteLine("Строка успешно дешифрована!");
                    foreach (string s in g)
                    {
                        result = string.Empty;
                        //Цикл по каждому символу строки
                        for (int i = 0; i < s.Length; i++)
                        {
                            if (Convert.ToInt16(s[i]) == 32)
                                result += ' ';
                            //Если буква является строчной
                            if ((Convert.ToInt16(s[i]) >= 1072) && (Convert.ToInt16(s[i]) <= 1105))
                            {
                                //Если буква, после сдвига выходит за пределы алфавита
                                if (Convert.ToInt16(s[i]) - shift < 1072)
                                    //Добавление в строку результатов символ
                                    result += Convert.ToChar(Convert.ToInt16(s[i]) - shift + 32);
                                //Если буква может быть сдвинута в пределах алфавита
                                else
                                    //Добавление в строку результатов символ
                                    result += Convert.ToChar(Convert.ToInt16(s[i]) - shift);
                            }
                            //Если буква является прописной
                            if ((Convert.ToInt16(s[i]) >= 1040) && (Convert.ToInt16(s[i]) <= 1071))
                            {
                                //Если буква, после сдвига выходит за пределы алфавита
                                if (Convert.ToInt16(s[i]) - shift < 1040)
                                    //Добавление в строку результатов символ
                                    result += Convert.ToChar(Convert.ToInt16(s[i]) - shift + 32);
                                //Если буква может быть сдвинута в пределах алфавита
                                else
                                    //Добавление в строку результатов символ
                                    result += Convert.ToChar(Convert.ToInt16(s[i]) - shift);
                            }
                        }

                        //Вывод на экран дешифрованной строки
                        
                        Console.WriteLine(result);
                    }
                }
                Console.WriteLine("Для выхода из программы нажмите Escape");
            } while (Console.ReadKey(true).Key != ConsoleKey.Escape);
        }
    }
}

Решение задачи: «Добавить букву "ё" в шифр Цезаря»

textual
Листинг программы
       static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("Первый аргумент -ТЕКСТ, второй аргумент -сдвиг");
                Console.ReadKey();
            }
            else
            {
 
                string decoded_text = args[0]; 
                string encrypted_text = " ";
                int shift = Int32.Parse(args[1]);
                char character = '0';
                decoded_text = decoded_text.ToUpper();
 
                char[] alphabet = new char[33] { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 
                'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я' };
 
                Console.WriteLine("Шифруем текст {0}", decoded_text);       //Display the decoded text
 
                foreach (char c in decoded_text)
                    {
                        character = c;
                        int shift1 = Array.IndexOf(alphabet, character) - shift;
                        if (shift1 <= 0)
                            shift1 = shift1 + 33;
 
                        if (shift1 >= 33)
                            shift1 = shift1 - 33;
                        encrypted_text += alphabet[shift1];
                    }
                Console.WriteLine("\nСдвиг {0},  {1}", shift, encrypted_text);
                Console.ReadKey();                
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.5 из 5