Добавить букву "ё" в шифр Цезаря - 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д