Добавить букву "ё" в шифр Цезаря - 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();
}
}