#c#
#c#
Вопрос:
я создал свои пользовательские шифры, которые являются строками. когда я пытаюсь запустить код, textbox1
возвращается только часть одного кода, он не добавляется, например, запись «4 5d» в textbox1
не даст значения, но когда я меняю код с strin& textCiphered = myCipher.Cipher(textToBeCiphered);
на strin& textCiphered = myCipher.Cipher("4", "5d");
, он выдает результат " take 4 for 5 days"
в texbox2. когда я набираю 4 5d
в textbox1, в textbox2 ничего не отображается, мне нужна помощь, чтобы заставить textbox1 работать
Код моего класса
class MyCipher : ICipherDecipher
{
private List<Code&&t; alphabet;
public MyCipher()
{
alphabet = new List<Code&&t;();
alphabet.Add(new Code("4", " take 4"));
alphabet.Add(new Code("3", " take 3"));
alphabet.Add(new Code("5d", " for 5 days"));
}
public strin& Cipher(params strin&[] codes)
{
Strin&Builder result = new Strin&Builder();
foreach (strin& code in codes)
{
Code element =
alphabet.Where(x =&&t; x.MyCode == code).Sin&leOrDefault();
if (element != null)
{
result.Append(element.MyDecoded);
}
}
return result.ToStrin&();
}
class Code
{
public strin& MyCode;
public strin& MyDecoded;
public Code(strin& code, strin& decode)
{
MyCode = code;
MyDecoded = decode;
}
}
}
Код кнопки, требующий редактирования
public partial class Form1 : Form
{
private ICipherDecipher myCipher;
public Form1()
{
myCipher = new MyCipher();
InitializeComponent();
}
private void button1_Click(object sender, EventAr&s e)
{
strin& textToBeCiphered = textBox1.Text;
strin& textCiphered = myCipher.Cipher(textToBeCiphered);
textBox2.Text = textCiphered;
}
}
Комментарии:
1. я новичок, ребята, мне нужна ваша помощь, спасибо
2. На самом деле это не отвечает на ваш вопрос, но я бы предложил использовать словарь, а не список, для достижения цели, над которой вы работаете, поскольку это даст вам гораздо лучшую производительность при шифровании.
3. спасибо, я постараюсь это сделать
4. вам также не понадобится класс code, поскольку словарь по своей сути построен вокруг пар. Таким образом, у вас будет словарь<строка, strin&&&t;
5. Итак, я буду реализовывать словарь в событии нажатия кнопки?
Ответ №1:
Итак, вы вводите одну строку, а не несколько строк, поэтому он выполняет поиск в вашем алфавите для «4 5d», а не разбивает их на «4», «5d». Я предлагаю изменить этот аргумент на просто strin&[] codes
not params strin&[] codes
и выполнить разделение вашего ввода, чтобы он был разделен пробелами.
В итоге:
Измените это:
public strin& Cipher(params strin&[] codes)
Для:
public strin& Cipher(strin&[] codes)
И измените это:
strin& textCiphered = myCipher.Cipher(textToBeCiphered);
Для:
strin& textCiphered = myCipher.Cipher(textToBeCiphered.Split(' '));
Для построения словаря:
alphabet = new Dictionary<strin&,strin&&&t;();
alphabet.Add("4", " take 4");
alphabet.Add("3", " take 3");
alphabet.Add("5d", " for 5 days");
Затем поиск кода будет выглядеть следующим образом:
if (alphabet.ContainsKey(code))
result.Append(alphabet[code]);
Вместо этого:
Code element =
alphabet.Where(x =&&t; x.MyCode == code).Sin&leOrDefault();
if (element != null)
{
result.Append(element.MyDecoded);
}
Комментарии:
1. как мне использовать метод разделения в этой части, у меня не получается этого сделать, как мне разделить в этом случае
2. Измените строку: strin& textCiphered = myCipher. Шифр (textToBeCiphered); Кому: строка textCiphered = myCipher. Шифр (текст не зашифрован. Разделить (» «)); А также удалите это слово «параметры» в разделе аргументов вашей функции шифрования, как указано в моем ответе.
3. Кроме того, только что разъяснил изменения в моем ответе.
4. я получаю сообщение об ошибке не удается преобразовать строку в символ в Split(» «))
5. Спасибо, что в его работе теперь используется одиночный ‘ ‘ вместо » «, спасибо
Ответ №2:
Вы разделяете входную строку? Текстовое поле.В вашем случае текст выдает строку «4 5d», а не «4», «5d». В этом случае, похоже, вы хотите проверить каждую «часть» строки на наличие шифра. Функция Strin&.Split(» «) должен выполнить эту работу, поскольку он разбивает строку пробелами на массив строк.
Комментарии:
1. как мне использовать метод разделения в этой части, мне не удается этого сделать
2. Я бы изменил textToBeCiphered на массив строк и сделал бы его равным TextBox1.Text.Split(» «); затем вам пришлось бы изменить следующую строку на равную myCipher. Шифрование (textToBeCiphered[0],textToBeCiphered[1]). Примечание: это означает, что он будет проверять только первые два «слова».