Почему массив заполняется, повторяя последний символ предыдущей строки? - C#
Формулировка задачи:
Здравствуйте, подскажите почему массив заполняется повторяя последний символ предыдущей строки. Смысл в том, что массив после ключевого слова заполняется всеми буквами алфавита, кроме тех, что в ключевом слове. Также из алфавита удаляются буквы Ё (заменяется буквой Е) и буква Й (заменяется буквой И). Буквы Ъ и Ь считаются одной и той же буквой.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace PlayFairCipher { class Cipher { char[] alphaMap; //alphaMap будет содержать все буквы от а до я string keyword; //Ключ пользователя char[,] LookupTable; public Cipher() { alphaMap = new char[31]; // заполняем alphamap for (int i = 0; i < 31; i++) { int t = (int)'а'; alphaMap[i] = (char)(t + i); } LookupTable = new char[5, 6]; } //Этот метод берет ключевое слово и генерирует таблицу public void generateTable() { int k = 0; int i = 0; int j = 0; int[] flagarray; //флаг массив используется, чтобы сообщить, если готов алфавит flagarray = new int[31];// покрыты в массиве или нет Console.WriteLine("Введите ваш ключ: "); string inputText = Console.ReadLine(); for (i = 0; i < inputText.Length; i++) if (Char.IsLetter(inputText[i])) { if (inputText[i] != 'й') keyword += inputText[i]; else keyword += 'и'; } keyword = keyword.ToLower(); char[] table; table = new char[31]; for (k = 0, i = 0; i < keyword.Length; i++) { int p = (int)keyword[i] - (int)('а'); if (flagarray[p] != 1) { table[k] = keyword[i]; flagarray[p] = 1; k++; } } for (j = 0; j < 31; j++) { if (flagarray[j] == 0) { table[k] = alphaMap[j]; k++; } } for (i = 0; i < 5; i++) { for (j = 0; j < 6; j++) { LookupTable[i, j] = table[i * 5 + j]; } } } public void Display() { for (int i = 0; i < 5; i++) { for (int j = 0; j < 6; j++) { Console.Write(LookupTable[i, j] + " "); } Console.WriteLine(); } } } class Program { static void Main(string[] args) { Cipher c1 = new Cipher(); c1.generateTable();// Generate a Look Up Table c1.Display();//Display the Look Up Table Console.ReadLine(); } } }
Решение задачи: «Почему массив заполняется, повторяя последний символ предыдущей строки?»
textual
Листинг программы
string s = "ключключ" + "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"; char[,] LookupTable = new char[5, 6]; s.ToLower() .Replace('ё', 'е') .Replace('й', 'и') .Replace('ъ', 'ь') .Distinct() .Take(5 * 6) .Aggregate(0, (i, c) => { LookupTable[i / 6, i % 6] = c; return i + 1; });
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д