Быстрая проверка символа - C#

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

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

Доброго времени суток в попытке реализовать шифр "Четырех квадратов"(https://ru.wikipedia.org/wiki/Шифр_четырёх_квадратов ) встретилась такая трудность , как "пропуск текста" , смысл в том что для шифрования берется два символа, по порядку и делается перестановка этих символов в четырех массивах.Смысл вопроса : так,как этот шифр моноалфавитный, он работает только с теми символами которые находятся в массивах alfavitEng - набор всех символов, мне нужна функция которая проверяла бы входимый символ с теми которые есть в матрице alfavitEng, но так как это алгоритм шифрования, мне нужно что бы это проходило как можно быстрее(я думаю, что полный перебор одного символа со всеми возможными будет не очень правильно и затратно) Вот фрагмент класса где описан шифр:
        static public string[,] mass1 = new string[6, 6];
        static public string[,] mass2 = new string[6, 6];
        static public string[,] mass3 = new string[6, 6];
        static public string[,] mass4 = new string[6, 6];
 
        static string[] alfavitEng = new string[]
        {
            "q", "w", "e", "r", "t","s",
            "y", "u", "i", "o", "a",".",
            "d", "f", "g", "h", "j",",",
            "k", "l", "z", "x", "c","?",
            "v", "b", "n", "m", "p","!",
            " ", ":", "(", ")", "=", "-"
        };
 
        /// 
        /// Расшифровка
        /// 
        /// 
        /// 
        /// 
        static public string EncrGeneration2Symbols(string a, string b)
        {
            int ai=0, aj=0, bi=0, bj=0;
            for (int str = 0; str < 6; str++)
                for (int stlb = 0; stlb < 6; stlb++)
                {
                    if (mass2[str, stlb] == a) 
                    {
                        ai = str; aj = stlb;
                    }
                    if (mass3[str, stlb] == b)
                    {
                        bi = str; bj = stlb;
                    }
                }
            string slog = mass1[ai, bj] + mass4[bi, aj];
            return slog;
        }
        
        /// 
        /// Шифрование 
        /// 
        /// 
        /// 
        /// 
        static public string CrGeneration2Symbols(string a, string b)
        {
            int ai = 0, aj = 0, bi = 0, bj = 0;
            for (int str = 0; str < 6; str++)
                for (int stlb = 0; stlb < 6; stlb++)
                {
                    if (mass1[str, stlb] == a)
                    {
                        ai = str; aj = stlb;
                    }
                    if (mass4[str, stlb] == b)
                    {
                        bi = str; bj = stlb;
                    }
                }
            string slog = mass2[ai, bj] + mass3[bi, aj];
            return slog;
        }
 
        /// 
        /// Генерирует ключ из 4-ох квадратов
        /// 
        static public void Generation4MassEng()
        {
            int[,] c1, c2, c3, c4 = new int[6,6];
        Random rand = new Random();
 
            c1 = GetRandomMatrix(6, 6);
            c2 = GetRandomMatrix(6, 6);
            c3 = GetRandomMatrix(6, 6);
            c4 = GetRandomMatrix(6, 6);
 
            for (int i = 0; i < 6; i++)
                for (int j = 0; j < 6; j++) 
                {
                    mass1[i, j] = alfavitEng[c1[i, j]];//Верхний слева
                    mass2[i, j] = alfavitEng[c2[i, j]];//Верхний справа
                    mass3[i, j] = alfavitEng[c3[i, j]];//Нижний слева
                    mass4[i, j] = alfavitEng[c4[i, j]];//Нижний вправо
                }            
        }
 
        static Random rnd = new Random();
 
        /// 
        /// Генерирует массив случайных чисел
        /// 
        /// 
        /// 
        /// 
        static int[,] GetRandomMatrix(int rowCount, int colCount)
        {
            int[,] matrix = new int[rowCount, colCount];
            int[] array = Enumerable.Range(0, rowCount * colCount).OrderBy(x => rnd.Next()).ToArray();
            for (int i = 0; i < rowCount; i++)
                for (int j = 0; j < colCount; j++)
                    matrix[i, j] = array[i * colCount + j];
            return matrix;
        }
И вывод результата шифрования
                    foreach (string a in textBox1.Lines)
                    {
                        string[] a1 = new string[a.Length+1];
 
                        for (int i = 0 ; i < a.Length; i++)
                        {
                                a1[i] = Convert.ToString(a[i]);
                        }
 
                        if ((a.Length) == 1)
                        {
                            a1[a.Length] = "a";
                        }
 
                        for (int i = 0; i < (a1.Length/2); i++)
                        {
                            string c1 = a1[i*2]; //c1 = c1.ToLower();
                            string c2 = a1[i*2+1]; //c2 = c2.ToLower();
                            textBox2.Text += Algoritms.CrGeneration2Symbols(c1, c2);
                        }
                    }
ПОМОГИТЕ!!!

Решение задачи: «Быстрая проверка символа»

textual
Листинг программы
                case 'a':
                case 'b':
                case 'c':
                case 'd':
                case 'e':
                ....
                    return true;
               default:
                    return false;

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


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

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

11   голосов , оценка 3.909 из 5
Похожие ответы