Member 14075859 Ответов: 2

Моя программа caesar cipher работает, но мне нужно уметь шифровать цифры, пробелы и специальные символы..


Я создаю шифровальную программу
Моя программа должна попросить пользователя ввести строку, а затем ввести ключ для ее шифрования.
Он также имеет функцию расшифровки
Код работает нормально,но я все еще не могу зашифровать цифры, пробелы и специальные символы
Всякий раз, когда я ввожу один из них, он остается прежним
Я новичок, пытающийся это сделать
Мое задание состояло только в том, чтобы зашифровать, как я это сделал, и это работает, но я просто хочу сделать это дальше для моего собственного знания.
Спасибо

Что я уже пробовал:

использование системы;
использование системы.Коллекции.Общий;
использование System.Linq;
использование System.Text;
использование системы.Нарезание резьбы.Задачи;

пространство имен Ceasar_Shift
{
класс MainClass
{

публичный статический шифрования символов(тип char символ, Ключ, инт )
{
если (!char.Островитянин(персонаж))
{

Возвращение героя;
}

char d = char.IsUpper(характер) ? "А" : "а";
return (char) (((символ + Ключ) - d) % 26) + d);


}

//коды шифрования
публичное статическое шифрование строк(string input, int key)
{
выходная строка = строка.Пустой;

foreach (символ char во входных данных)
выход += шифрование(символ, Ключ);

обратный выход;
}


//коды расшифровки
общественности статической строки расшифровка(строки ввода, ключ, инт )
{
возвратное шифрование(вход, 26 - ключ);
}

2 Ответов

Рейтинг:
2

Richard MacCutchan

Вместо того, чтобы основывать все на числе 26, используйте значение самого высокого символа, который вам нужно обработать. Например, в ASCII есть 128 символов, поэтому вы можете основывать свой шифр на этом значении.


Рейтинг:
2

OriginalGriff

Я бы сделал это так, чтобы иметь строку a, которая содержит все "допустимые" символы:

string cypherChars = "0123456789abcdefghijhklmnopqrstuvwxyz !\"£$%^&*()-+=ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Поскольку строка-это коллекция в C#, вы можете использовать индекс в ней, чтобы извлечь символ в определенной позиции:
char a = cypherChars[10];
char b = cypherChars[11];
...
Вы также можете использовать строковый метод Помощи indexOf[^] чтобы найти местоположение символа в строке.
Итак ... возьмите каждый символ в вашем вводе, используйте IndexOf, чтобы найти его в строке символов cypher. Смещение индекса на значение смещения Цезаря и модуль использования, чтобы гарантировать, что он остается внутри строки. Используйте новый индекс для доступа к "зашифрованному" символу и добавьте его в выходные данные.

Повторная сборка-это обратная разборка!

Попробуйте: это довольно просто, когда вы получаете вашу голову вокруг него.


Member 14075859

подождите вы можете просто включить его в мой код
я не могу этого сделать :/

OriginalGriff

Нет, потому что это твое домашнее задание, а не мое, и ты ничему не научишься, если я это сделаю! :смеяться:

Да ладно тебе, это довольно простая штука! Возьмите его в легких стадиях, и это не должно беспокоить вас слишком много.
Начните с создания строки и использования IndexOf для поиска конкретных символов: например, 'a', 'b', 'z', '$'. Когда это сработает, используйте этот код, чтобы начать поиск индексов символов во входном тексте.

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

Member 14075859

итак, могу ли я изменить свой фактический код или начать новый?

это должно быть как
строковый шифр = "0123456789abcdefghijhklmnopqrstuvwxyz !\"£$%^&*()-
+=АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ";

А потом?
Ну эта часть на самом деле не моя домашняя работа лол
это личное обучение но я так заблудился
потому что на занятиях я изучал основы и т. д.

OriginalGriff

"Личное обучение" - это именно то, что домашнее задание: вот для чего оно предназначено!

Итак, вы создали строку. Теперь используйте IndexOf, чтобы найти конкретные символы, которые я вам показал.

Member 14075859

вот эта часть меня смущает

public int IndexOf (char value);
вот так?

OriginalGriff

Если вы перейдете по ссылке, то там есть пример кода!
Он использует числовой идентификатор символа Unicode, но это то же самое для "обычных символов":

int index = myString.IndexOf('a');

Попробуйте (используйте отладчик, чтобы видеть, что происходит, и редактировать свой код по мере его выполнения) и посмотрите, что произойдет!

Member 14075859

я делаю
int index = myString.IndexOf('a');
дай мне попробовать кое-что, а потом я вернусь к тебе.