![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
Deviant |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2015 Репутация: нет Всего: нет |
Всем привет. Нужна помощь в написании программы, которая бы шифровала мой текст методом замены символов на числа.
Допустим, А=1, Б=35, Г=193. У меня есть исходник одной программы(она не моя, спасибо одному человеку). Но там символ заменяется на другой символ. Я попытался изменить пару значений во втором массиве на двузначное число, но получил ошибку: Incompatible types: 'Char' and 'string'. Используя этот код, как я могу преобразовать char в string? Или нужно делать всё по-другому? Заранее спасибо. Вот часть кода:
Это сообщение отредактировал(а) Deviant - 7.1.2015, 23:13 |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Приобразование Char --> string происходит автоматически при присваивании. Твоя ишибка вываливается при попытке приобразовать string --> Char, а это не возможно т.к. Char - это всегда один символ, а string - это заранее не известно сколько символов и зачастую не один.
Делай 2 словаря, один array of Char, а второй array of Byte. Потом пробегайся по всему тексту посимвольно, находи индекс каждого символа в первом массиве и заменяй на число с таким же индексом из второго массива. Вообще задача очень похожа на задание лабораторной работы. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Deviant |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2015 Репутация: нет Всего: нет |
11 лет назад, когда я был в 2 классе, мы писали друг другу записки. Чтобы учителя не знали о чём идёт речь, мы придумали свой "шифр". Тогда мы много чего не знали и в качестве букв мы использовали простые "закарючки"(выдуманные иероглифы). Но потом я предложил эту ерунду сменить на цифры. Вот так вот )
Я начал работать с Delphi, захотел такую программку написать. Но нужной информации не нашёл. Везде описываются "заумные" методы шифрования текста. Метод Цезаря, с каким-то ключом и т.д.. =================================================== Писал-писал, но не получилось. Решил забить. Потом решил напоследок написать и - чудо, получилось. Но как-то криво оно отображается в RichEdit. Что я не так сделал?
Скрин Это сообщение отредактировал(а) Deviant - 8.1.2015, 05:37 |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Скрин не открывается, не знаю что у тебя там криво. Вот рабочий пример, разбирайся.
А вообще в старших версиях Delphi есть созданный специально для подобного словарь TDictionary. С ним еще проще будет. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Deviant |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2015 Репутация: нет Всего: нет |
Да это трабл с радикалом. На него заливал скрин.
Спасибо! Работает. Предыдущий вариант тоже был рабочим, но в RichEdit цифры не отображались. Вернее отображались, но то было сложно назвать цифрами. Сейчас ещё подумаю и сделаю так, чтобы можно было ещё и расшифровывать ) ==================================================== Хм. Странно. Я ничего не изменял в твоём коде, лишь добавил пару букв и значений в массивах, но при компиляции выдаёт ошибку: "Unable to create process: Не удаётся найти указанный файл". В чём теперь проблема? Ошибок никаких нет, я ничего не исправлял... ==================================================== Проблема решена. Захотел сделать ещё и расшифровку. Вроде бы сделал, но не расшифровывает. Допустим, А = 1, Б = 2, а Г = 12. Если я напишу "АБ" - оно зашифрует как "12". Но если я попытаюсь расшифровать, то получу "Г". Как исправить? Неужели невозможно? Это сообщение отредактировал(а) Deviant - 8.1.2015, 20:29 |
|||
|
||||
ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 1 Всего: 252 |
||||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 1 Всего: 252 |
||||
|
||||
Deviant |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2015 Репутация: нет Всего: нет |
Хм. Жаль. Тогда придётся использовать разделитель. Допустим, я хочу, чтобы в качестве разделителя использовался символ "|", как мне тогда подправить код?
|
|||
|
||||
ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 1 Всего: 252 |
Строка 23 будет выглядеть так:
Строки с 35 по 53 изменятся до неузнаваемости. |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Не. Какая нам разница что будет хранится в массиве-словаре? Главное что бы на выходе получалось с нулем, если цифра меньше 10.
![]() Добавлено через 1 минуту и 44 секунды А как вы в школе шифровали свои записки? Все-равно ведь использовали какой-то разделитель. Скорее всего то был пробел и шифр ваш имел вид "17 3 58 25 48 74 58" и т.п. в таком роде. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Deviant |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2015 Репутация: нет Всего: нет |
Ой, а я уже и не помню. Давно было. Вроде бы ставили ' между числами.
"Строки с 35 по 53 изменятся до неузнаваемости." В каком смысле? Придётся всё переделывать? ( |
|||
|
||||
ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 1 Всего: 252 |
Да вообще-то и не до такой уж неузнаваемости
![]()
Обрати внимание - я добавил для тестирования еще один компонент - RichEdit3 Добавлено через 9 минут и 12 секунд Но массив-словаря то имеет тип byte ! Выход мы генерируем Res := Res + IntToStr(B[i]); А если B[1] := 02 то что нам покажет ShowMessage(IntToStr(B[1])) ? |
|||
|
||||
Deviant |
|
|||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 7.1.2015 Репутация: нет Всего: нет |
Отлично! Всё работает как часы!
Спасибо вам большое, ребят, выручили ) Сейчас ещё строчку допишу для кнопки 3, чтобы переводила расшифрованный текст в нижний регистр и всё ) Тему можно закрывать, ещё раз спасибо ) =================== Дописал ) И да, как я понял, то в качестве разделителя нельзя использовать символ ' ? Меня устраивает и "|", но мне просто интересно. Это сообщение отредактировал(а) Deviant - 8.1.2015, 23:03 |
|||
|
||||
ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 1 Всего: 252 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |