Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для T3M4CH
33 / 3 / 2
Регистрация: 26.07.2018
Сообщений: 54

Шифр. Замена букв по Dictionary

23.02.2019, 09:54. Показов 3695. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю шифратор, и завис на определенном моменте, где нужно из stroka выловить все буквы и преобразовать по средством dictionary, не могли бы помочь?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Dictionary<string, int> Alphabet = new Dictionary<string, int>
            {
                {"a", 02 }, // 0
                {"б", 12 },
                {"в", 102},
                {"г" ,112},
                {"д",1002},
                {"е" ,1012},
                {"ё" ,1102},
                {"ж",1112},
                {"з" ,10002},
                {"и" ,10012},
                {"к",10102 },
                {"л" ,10112},
                {"м" ,11002},
                {"н" ,11012},
                {"о" ,11102},
                {"п" ,11112},
                {"р" ,100002},
                {"с" ,100012},
                {"т" ,100102},
                {"у" ,100112},
                {"ф" ,101002},
                {"х" ,101012},
                {"ц" ,101102},
                {"ч" ,101112},
                {"ш" ,110002},
                {"щ" ,110012},
                {"ъ" ,110102},
                {"ы" ,110112},
                {"ь" ,111002},
                {"э" ,111012},
                {"ю" ,111102},
                {"я" ,111112}, // 31
   
 
            };
        
            Console.WriteLine("Строку");
            string stroka = Console.ReadLine();
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2019, 09:54
Ответы с готовыми решениями:

Дан текст. Замена латинских букв на "!", замена гласных русских букв на "-", подсчёт цифр в тексте
Условие. Написать программу на языке Паскаль (можно и в среде Delphi 7.0), реализующую решение задачи с использованием структурированного...

Шифр (замена символов)
Добрый день/вечер! Как можно осуществить замену всех символов в тексте? Я сделал, чтобы пользователь сам задавал значение символа....

Замена букв в предложении. Не работает замена кириллицы
Суть программы заменить все определенные буквы в предложении на другую. Собственно, вот код. Латиницу заменяет как надо. Но если ввести...

11
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
23.02.2019, 10:06
Цитата Сообщение от T3M4CH Посмотреть сообщение
не могли бы помочь
Поменяйте тип словаря на Dictionary<char, int>

Потом можно так:
C#
1
2
IEnumerable<int> strokaInt = stroka.Select(ch => Alphabet[ch]);
List<int> strokaList = strokaInt.ToList();
Добавлено через 1 минуту
Но надо учитывать что диапазон char намного больше чем диапазон словаря, поэтому надо решить что делать с теми символами которых нет в словаре. Иначе можно при разборе строки получить исключение.
1
 Аватар для T3M4CH
33 / 3 / 2
Регистрация: 26.07.2018
Сообщений: 54
23.02.2019, 11:01  [ТС]
Можно подробней расписать, не понимаю чуть-чуть
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
23.02.2019, 12:36
Цитата Сообщение от T3M4CH Посмотреть сообщение
Можно подробней расписать, не понимаю чуть-чуть
Select - это метод расширения LINQ. Перебирает все элементы последовательности и вычисляет по ним указанную функцию. string - это последовательность char. Поэтому каждый символ строки заменится на соответствующее целое из словаря. На выходе Select возвращает последовательность значений вычисленной функции.

ToList - тоже метод расширения LINQ. Преобразует последовательность в соответствующий список с тем же типом данных. Можно преобразовать в массив методом ToArray.

Понятно? Есть ещё вопросы?

Добавлено через 1 час 18 минут
T3M4CH, А почему Вы в словаре "й" пропустили?
У Вас предусмотрена только кодировка слов, но не предложений?
Если надо кодировать предложения, то в словарь надо ввести пробел и хоть какие-то знаки препинания.
Кодировка чисел и английского текста не предусматривается?
1
 Аватар для T3M4CH
33 / 3 / 2
Регистрация: 26.07.2018
Сообщений: 54
23.02.2019, 13:49  [ТС]
И правда й пропустил и пробелы со знаками, мне бы сейчас понять саму концепцию работы с этими методами. Хорошо, а можете подсказать как код то до конца дописать. Сейчас, у меня только размытое представление о этих методах. Можете помочь дописать код? Ну или пример, там где встречается схожая задача
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
23.02.2019, 14:03
Лучший ответ Сообщение было отмечено T3M4CH как решение

Решение

Цитата Сообщение от T3M4CH Посмотреть сообщение
Можете помочь дописать код?
Так это и есть весь код.
Что дальше делать с полученными кодами я не знаю. Вы же эту задачу ставили, Вы и решите что с ними делать.

Допустим если просто вывести на консоль, то так

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            Dictionary<char, int> Alphabet = new Dictionary<string, int>
            {
                {'a', 02 }, // 0
             /// Остальные элементы
                {'я' ,111112}, // 32
            };
        
            Console.WriteLine("Строку");
            string stroka = Console.ReadLine();
 
            IEnumerable<int> strokaInt = stroka.Select(ch => Alphabet[ch]);
            List<int> strokaList = strokaInt.ToList();
 
            Console.WriteLine(string.Join ("\r\n", strokaInt));
0
 Аватар для T3M4CH
33 / 3 / 2
Регистрация: 26.07.2018
Сообщений: 54
23.02.2019, 15:44  [ТС]
Спасиб)

Добавлено через 1 час 38 минут
А в обратную сторону? То есть из цифр получить буквы. Получается из int обратно в char
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
23.02.2019, 15:59
Цитата Сообщение от T3M4CH Посмотреть сообщение
А в обратную сторону? То есть из цифр получить буквы. Получается из int обратно в char
В каком виде у Вас получается закодированное значение.
Да, я показал как получить из string ПОСЛЕДОВАТЕЛЬНОСТЬ int. НО это же не выходное значение.
Что по заданию Вам надо получить на выходе шифратора?

Добавлено через 5 минут
T3M4CH, рискну предположить, что у Вас в словаре значения должны быть не числа, а строки. И на выходе надо соединить последовательность строк в одну строку.
Так?
0
 Аватар для T3M4CH
33 / 3 / 2
Регистрация: 26.07.2018
Сообщений: 54
23.02.2019, 17:19  [ТС]
Да, мне нужно сделать реверс программы выше
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
23.02.2019, 17:33
Цитата Сообщение от T3M4CH Посмотреть сообщение
Да, мне нужно сделать реверс программы выше
Сомневаюсь. Так как в варианте Выше ещё не получено выходное значение. Каким оно должно быть?

Вот для дешифровки Вы какое значение будете задавать? Приведите пример.

Даже лучше приведите пример начального сообщения, шифрованного и дешифрованного
0
 Аватар для T3M4CH
33 / 3 / 2
Регистрация: 26.07.2018
Сообщений: 54
23.02.2019, 18:59  [ТС]
Например : ау

по этому коду

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Dictionary<char, string> Alphabet = new Dictionary<char, string>
            {
                {'А', "Е02" }, // 0
                {'Б', "Е12" },
                {'В', "Е102"},
                {'Г' ,"Е112"},
                {'Д',"Е1002"},
                {'Е' ,"Е1012"},
                {'Ё' ,"Е1102"},
                {'Ж',"Е1112"},
                {'З' ,"Е10002"},
                {'И' ,"Е10012"},
                {'К',"Е10102" },
                {'Л' ,"Е10112"},
                {'М' ,"Е11002"},
                {'Н' ,"Е11012"},
                {'О' ,"Е11102"},
                {'П' ,"Е11112"},
                {'Р' ,"Е100002"},
                {'С' ,"Е100012"},
                {'Т' ,"Е100102"},
                {'У' ,"Е100112"},
                {'Ф' ,"Е101002"},
                {'Х' ,"Е101012"},
                {'Й', "Е1010102" },
                {'Ц' ,"Е101102"},
                {'Ч' ,"Е101112"},
                {'Ш' ,"Е110002"},
                {'Щ' ,"Е110012"},
                {'Ъ' ,"Е110102"},
                {'Ы' ,"Е110112"},
                {'Ь' ,"Е111002"},
                {'Э' ,"Е111012"},
                {'Ю' ,"Е111102"},
                {'Я' ,"Е111112"},
                {'а', "02" }, // 0
                {'б', "12" },
                {'в', "102"},
                {'г' ,"112"},
                {'д',"1002"},
                {'е' ,"1012"},
                {'ё' ,"1102"},
                {'ж',"1112"},
                {'з' ,"10002"},
                {'и' ,"10012"},
                {'к',"10102" },
                {'л' ,"10112"},
                {'м' ,"11002"},
                {'н' ,"11012"},
                {'о' ,"11102"},
                {'п' ,"11112"},
                {'р' ,"100002"},
                {'с' ,"100012"},
                {'т' ,"100102"},
                {'у' ,"100112"},
                {'ф' ,"101002"},
                {'х' ,"101012"},
                {'й', "1010102" },
                {'ц' ,"101102"},
                {'ч' ,"101112"},
                {'ш' ,"110002"},
                {'щ' ,"110012"},
                {'ъ' ,"110102"},
                {'ы' ,"110112"},
                {'ь' ,"111002"},
                {'э' ,"111012"},
                {'ю' ,"111102"},
                {'я' ,"111112"},
                {' ', "@12" },
                {'.', "#AS" },
                {',', "@31"},
                {'!', "@281" }
                // 32
   
 
            };
        
            Console.Write("Строку : ");
            string stroka = Console.ReadLine();
            IEnumerable<string> strokaInt = stroka.Select(ch => Alphabet[ch]);
            List<string> strokaList = strokaInt.ToList();
 
            Console.Write(string.Join("", strokaInt));
            Console.ReadKey();
мы получим 02100112
и все что мне нужно это из этого кода получить свое ранее введенное "ау"
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
23.02.2019, 23:08
Цитата Сообщение от T3M4CH Посмотреть сообщение
Например : ау...
Я поэтому и интересовался, что Ваш первоначальный код уж больно сомнительный был.

Добавлено через 24 минуты
Вот пример кодера-декодера
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
string key = "абвгдеёжзиЙклмнопрстуфхцчшщъыьэюя /?!?\":;\\/-+"; // Строка-ключ допустимых символов
IEnumerable<char> keyChar = key.Distinct(); // искоючение повторяющихся символов
IEnumerable<(char Ch, string Code)> keyChCode = keyChar.Select((ch, ind) => (Ch: ch, Code: Convert.ToString(ind, 2))); // Получение сочетания символ-код
Dictionary<char, string> dictCode = new Dictionary<char, string>(); // Словарь кодирования
Dictionary<string, char> dictDeCode = new Dictionary<string, char>(); // Словарь декодирования
 
// Заполнение словарей
foreach ((char Ch, string Code) tuple in keyChCode)
{
    dictCode.Add(tuple.Ch, tuple.Code);
    dictDeCode.Add(tuple.Code, tuple.Ch);
}
 
Console.WriteLine("Введите строку для кодирования");
string stroka = Console.ReadLine();
 
IEnumerable<char> strokaEnab = stroka.Where(ch => dictCode.TryGetValue(ch, out string _tmp)); // Фильтр разрещённых символов
IEnumerable<string> strokaIeCode = strokaEnab.Select(ch => dictCode[ch]); // Получение последовательности кодов
string strokaCode = string.Join("2", strokaIeCode)+"2"; // получение закодированной строки
 
Console.WriteLine("Закодированная строка");
Console.WriteLine(strokaCode);
 
Console.WriteLine("Введите строку для декодирования (Пустая строка - повторить предыдущую)");
stroka = Console.ReadLine();
if (string.IsNullOrWhiteSpace(stroka))
    stroka = strokaCode;
 
strokaEnab = strokaCode.Where(ch => ch >= '0' && ch <= '2'); // Фильтр допустимых символов
string[] strokaArr = new string(strokaEnab.ToArray()).Split('2'); // Разбивка строки на коды
IEnumerable<string> strokaCodeEnab = strokaArr.Where(code => dictDeCode.TryGetValue (code, out char _tmp)); // Фильтр допустимых кодов
IEnumerable<char> strokaCharCode = strokaCodeEnab.Select(str => dictDeCode [str]); // последовательность декодированных символов
string strokaDeCode = new string(strokaCharCode.ToArray()); // Декодированная строка
 
Console.WriteLine("Декодированная строка");
Console.WriteLine(strokaDeCode);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2019, 23:08
Помогаю со студенческими работами здесь

Шифр цезаря,сдвиг букв
Есть прога,считывающая кол-во слов в текстовом файле,нужно дописать шифр Цезаря,который бы сдвигал все буквенные значения (a&gt;b,b&gt;c) а...

Замена букв в строке на сочетание букв
Здравствуйте. Дана задача: дана строка которая содержит определенный текст который вводится с клавиатуры, в этом тексте необходимо...

Проинициализировать значениями dictionary вложенный в dictionary
Народ, помогите, как проинициализировать значениями такую конструкцию: Dictionary &lt;int,Dictionary&lt;string, int&gt;&gt;

Шифр Виженера: проверить, что входящий текст состоит только из букв
При запуске кода нужно проверить количество входящих значений и то, что входящее значение состоит исключительно из букв. int main(int...

Отбор из Dictionary вложенного в Dictionary
Здравствуйте, есть такой код: private Dictionary&lt;string, Dictionary&lt;int, string&gt;&gt; vt = new Dictionary&lt;string, Dictionary&lt;int,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru