текстовое поле, позволяющее использовать несколько строк для шифровальных кодов

#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 ничего не отображается — изображение

Комментарии:

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]). Примечание: это означает, что он будет проверять только первые два «слова».