Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 89

Шифр (замена символов)

09.06.2019, 20:20. Показов 5818. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день/вечер!
Как можно осуществить замену всех символов в тексте? Я сделал, чтобы пользователь сам задавал значение символа. Например "А" меняется на "Б", "Б" меняется на "В" и.т.д. Так вот, как можно сделать так, чтобы "А" поменялся на "Б" и после этого не менялся на "В", а продолжал заменять следующий символ. Извиняюсь, если как-то не понятно изложил вопрос.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.06.2019, 20:20
Ответы с готовыми решениями:

Шифр. Замена букв по Dictionary
Делаю шифратор, и завис на определенном моменте, где нужно из stroka выловить все буквы и преобразовать по средством dictionary, не могли...

Шифр Виженера: неверный результат шифрования символов
private static int smesh = (int)'a';//смещение алфавита относительно таблицы юникодов private static int alphLength = 26; ...

Шифр Цезаря (с ограничением символов)
В теме https://www.cyberforum.ru/delphi-beginners/thread739569.html есть исходник, но он шифрует\дешифрует со спец символами. А как...

15
5 / 3 / 2
Регистрация: 05.06.2019
Сообщений: 8
09.06.2019, 20:41
Просто перебирай символы в словах и заменяй их за один проход, к примеру

C#
1
2
3
4
5
6
7
for(int i = 0; i < Text.Length; i++)
            {
                switch(Text[i])
                {
                    case 'a': Text[i] = 'b'; break;
                }
            }
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
09.06.2019, 21:42
Цитата Сообщение от Fantan4ik Посмотреть сообщение
Так вот, как можно сделать так, чтобы "А" поменялся на "Б" и после этого не менялся на "В", а продолжал заменять следующий символ
увеличить итерацию на еденицу
0
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 89
10.06.2019, 18:13  [ТС]
Такс, проблемка. У меня есть "RichTextBox1", его мне и нужно зашифровать. Компилятор показывает ошибку "Невозможно присвоить значение свойству или индексатору "string.this[int]"". Что делать?

C#
1
2
3
4
5
6
7
for (int i = 0; i < RichTextBox1.Text.Length; i++)
            {
                switch (RichTextBox1.Text[i])
                {
                    case 'a': RichTextBox1.Text[i] = 'b'; break;
                }
            }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
10.06.2019, 18:39
Лучший ответ Сообщение было отмечено Fantan4ik как решение

Решение

Fantan4ik, строки в C# - это НЕИЗМЕНЯЕМЫЙ тип данных. Вы не можете некоим образом изменить строку, в том числе заменить в ней какой-то символ.
Вам надо создать НОВУЮ строку с заменённым символом и присвоить её по назначению.

Пример
C#
1
2
3
4
5
6
7
8
for (int i = 0; i < RichTextBox1.Text.Length; i++)
            {
                string text = RichTextBox1.Text;
                switch (text[i])
                {
                    case 'a': RichTextBox1.Text = text.Remove(i) + "b" + text.Substring(i+1) ; break;
                }
            }
Добавлено через 3 минуты
Пример замены всех символов А на символ Б
C#
1
RichTextBox1.Text = new string(RichTextBox1.Text.Select (ch => ch == 'А' ? 'Б': ch).ToArray());
Добавлено через 2 минуты
А в посте Поиск в строках массива текста вне зависимости от используемой раскладки посмотрите пример замены множества символов по словарю.
Задавая свой словарь получаете нужный Вам результат.
1
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 89
10.06.2019, 19:51  [ТС]
и последний глупенький вопросик
Как можно преобразовать "string" в "char"?
C#
1
2
3
4
5
6
7
8
for (int i = 0; i < RichTextBox1.Text.Length; i++)
            {
                string text = RichTextBox1.Text;
                switch (text[i])
                {
                    case Properties.Settings.Default.WordA: RichTextBox1.Text = text.Remove(i) + "A" + text.Substring(i + 1); break;
                }
            }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
10.06.2019, 19:56
Цитата Сообщение от Fantan4ik Посмотреть сообщение
Как можно преобразовать "string" в "char"?
Ни как!
string это массив char.
Как массив можно преобразовать к типу элемента? Ни как!

Вы что-то ни то делаете.
0
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 89
10.06.2019, 21:41  [ТС]
Вот бы понять, как правильно сделать. По идеи должно получиться шифрование текстового поля и дешифровка. Шифрование получилось, а вот дешифровка - нет. Каждый символ сохранен в параметр проекта. Но вот в кейсах его применять не удается.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
10.06.2019, 23:21
Цитата Сообщение от Fantan4ik Посмотреть сообщение
Но вот в кейсах его применять не удается.
Кейсы это неправильное решение.
В должны сохранять пары символов.
При шифровании создаёте по ним словарь прямой замены. При дешифровки словарь обратной замены.
Задавая эти словаре в код по ссылке что я дал, Вы получаете шифрование/дешифрования.
То есть код для шифрования/дешифрования используется один и тот же. Меняются только словари замены.
0
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 89
11.06.2019, 13:21  [ТС]
Ох, тяжело быть новичком..
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
11.06.2019, 21:37
Лучший ответ Сообщение было отмечено Fantan4ik как решение

Решение

Цитата Сообщение от Fantan4ik Посмотреть сообщение
Ох, тяжело быть новичком..
Новичок новичку рознь.
Задавайте более конкретные вопросы. Так как на на вопросы с чётко не обозначенными границами, примерами - будете получать и такие же ответы общего плана. Предполагается если интересующийся не уточняет конкретику, то значит у него хватает знаний эту конкретику реализовать самостоятельно.

Для указанного примера с классом для замены символов, немного изменим код убрав лишнее
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    static class Replace
    {
 
        /// <summary>Функция приведения символа к латинскому языку
        /// и верхнему регистру</summary>
        /// <param name="source">Исходный символ</param>
        /// <returns>Полученный символ</returns>
        public static char ReplaceChar(char source, Dictionary<char, char> ReplaceDict)
        {
            if (ReplaceDict.TryGetValue(source, out char result))
                return result;
            return source;
        }
 
        /// <summary>Функция приведения строки к латинскому языку
        /// и верхнему регистру</summary>
        /// <param name="source">Исходная строка</param>
        /// <returns>Полученная строка</returns>
        public static string ReplaceCharsInString(string source, Dictionary<char, char> ReplaceDict)
                 => new string(source.Select(ch => ReplaceChar(ch, ReplaceDict)).ToArray());
 
    }
Пример использования
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    /// Словарь прямой замены
    Dictionary<char, char> rusLat = new Dictionary<char, char>()
    {
        {'а', 'a' },
        {'б', 'b' },
        {'в', 'v' },
        {'д', 'd' },
        {'ж', 'j' },
        {'л', 'l' },
        {'о', 'o' },
        {'п', 'p' },
        {'р', 'r' },
        {'т', 't' },
        {'ь', '\'' },
    };
    /// Словарь обратной замены замены
    Dictionary<char, char> latRus = rusLat.ToDictionary(keyVal => keyVal.Value, keyVal => keyVal.Key);
 
    string original = "добро пожаловать"; // Исходная строка
    string code = Replace.ReplaceCharsInString(original, rusLat); // строка после замены символов
    string decode = Replace.ReplaceCharsInString(code, latRus); // строка после обраной замены символов
1
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 89
12.06.2019, 12:34  [ТС]
Так, хорошо. Смысл я понял. Теперь появился следующий вопрос. Как можно занести в библиотеку значение с текстового поля "textBoxA.Text" если библиотека имеет тип "char", а текстовое поле тип "string"? Или можно как-нибудь занести несколько значений в библиотеку с одного текстового поле? Я так понимаю, если заносить значения с одного текстового поля, то делать это нужно через маску. Если не сложно, можете привести пример?
C#
1
2
3
4
private void buttonAutorization_Click(object sender, EventArgs e)
        {
            rusLat.Add('A', textBoxA.Text);
        }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
12.06.2019, 12:37
Цитата Сообщение от Fantan4ik Посмотреть сообщение
Как можно занести в библиотеку значение с текстового поля "textBoxA.Text" если библиотека имеет тип "char",
Что такое библиотека?
0
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 89
12.06.2019, 12:50  [ТС]
Оговорился, словарь (Dictionary), а не библиотека
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
12.06.2019, 13:19
Цитата Сообщение от Fantan4ik Посмотреть сообщение
Оговорился, словарь (Dictionary), а не библиотека
В словарь Вы должны занести какие символы какими заменять - то есть это Ваш шифр.
А строку надо передавать в параметре методу ReplaceCharsInString()
1
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 89
12.06.2019, 13:28  [ТС]
Спасибо Вам большое! я разобрался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2019, 13:28
Помогаю со студенческими работами здесь

Шифр Кардано. Считывание символов из матрицы
Добрый день! У меня задача: реализовать дешифрацию метода Кардано (второй способ...

Шифр простой замены и местоположение символов
Видят боги, что я медленно, но уверенно восхожу на вершину криптографии. итак задан числовой текст. Простой пример. 10 23 21 ... 05...

Шифр простой замены и цвет символов
Вообще говоря в шифрах простой замены подразумевается замена символов алфавита на символы того алфавита либо замена их числами. Однако...

Шифр Виженера, работает некорректно при размере текста больше 35 символов
при вводе символов, когда размер текста выходит примерно за 35, в результате начинают теряться или появляться лишние символы, хотя исходный...

Замена символов
Заменить все символы &quot;!&quot; на символ &quot;*&quot;, а символы &quot;.&quot; на символ &quot;…&quot; математическая ошибка на end; &gt; Program zadacha6; var...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru