Как поставить условие на количество букв/знаков? - C#

Узнай цену своей работы

Формулировка задачи:

Сделан элемент управления, который считывает/записывает значения байтов с смещений в файле и преобразует их в буквы/знаки в текстовом поле в программе. Код элемента управления (текстовое поле):
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace Quicksilver
  5. {
  6. static class HeroMenuNameDecode
  7. {
  8. public static string Decode(byte[] bytess)
  9. {
  10. StringBuilder sb = new StringBuilder();
  11. for (int i = 0; i < bytess.Length; i++)
  12. {
  13. if (bytess[i] == 0xFF) // конец
  14. continue;
  15. if (dic.ContainsKey(bytess[i]))
  16. sb.Append(dic[bytess[i]]);
  17. else
  18. sb.Append("?");
  19. }
  20. return sb.ToString();
  21. }
  22. public static byte[] Encode(string text)
  23. {
  24. byte[] b = new byte[12] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, };
  25. char[] ch = text.ToCharArray();
  26. for (int i = 0; i < ch.Length; i++)
  27. {
  28. foreach (var item in dic)
  29. {
  30. if (item.Value == ch[i].ToString())
  31. {
  32. b[i] = item.Key;
  33. break;
  34. }
  35. }
  36. }
  37. return b;
  38. }
  39. static Dictionary<byte, string> dic = new Dictionary<byte, string>
  40. {
  41. {0x00, " "},
  42. {0x01, "!"},
  43. {0x20, "@"},
  44. {0x21, "A"},
  45. {0x22, "B"},
  46. {0x23, "C"} // и т.д.
  47. };
  48. }
  49. }
Как вместо этой строки?
Листинг программы
  1. byte[] b = new byte[12] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, };
Как вместо этой строки поставить условие если написано разное количество букв, то использовать одну из строк, при разном количестве букв?:
Листинг программы
  1. byte[] b = new byte[12] {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; //если ноль букв написано в текстовом поле, то использовать эту строку
  2. byte[] b = new byte[12] {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; //если одна буква написана в текстовом поле, то использовать эту строку
  3. byte[] b = new byte[12] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; //если пять букв, то использовать эту строку
  4. byte[] b = new byte[12] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, }; //если десять букв, то использовать эту строку

Решение задачи: «Как поставить условие на количество букв/знаков?»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Quicksilver
  6. {
  7.     static class HeroMenuNameDecode
  8.     {
  9.         public static string Decode(byte[] bytes)
  10.         {
  11.             StringBuilder sb = new StringBuilder();
  12.             for (int i = 0; i < bytes.Length; i++)
  13.             {
  14.                 if (bytes[i] == 0xFF) // конец
  15.                     break;
  16.                 char val;
  17.                 if (dic.TryGetValue(bytes[i], out val))
  18.                     sb.Append(val);
  19.                 else
  20.                     sb.Append("?");
  21.             }
  22.             return sb.ToString();
  23.         }
  24.  
  25.         public static byte[] Encode(string text)
  26.         {
  27.             // строка не может быть длиннее 11 из-за размера массива ниже...
  28.             // это ограничение можно убрать, сделав например
  29.             // byte[] b = new byte[text.Length + 1];
  30.             if (text.Length > 11) throw new ArgumentException("text");
  31.  
  32.             byte[] b = new byte[12];
  33.  
  34.             for (int i = 0; i < text.Length + 1; i++)
  35.                 b[i] = 0xFF;
  36.  
  37.             for (int i = 0; i < text.Length; i++)
  38.             {
  39.                 byte val;
  40.                 if (dic2.TryGetValue(text[i], out val))
  41.                     b[i] = val;
  42.             }
  43.             return b;
  44.         }
  45.  
  46.         static Dictionary<byte, char> dic = new Dictionary<byte, char>
  47.         {
  48.             {0x00, ' '},
  49.             {0x01, '!'},
  50.             {0x20, '@'},
  51.             {0x21, 'A'},
  52.             {0x22, 'B'},
  53.             {0x23, 'C'} // и т.д.
  54.         };
  55.  
  56.         static Dictionary<char, byte> dic2 = new Dictionary<char, byte>();
  57.  
  58.         static HeroMenuNameDecode()
  59.         {
  60.             foreach (var item in dic)
  61.                 dic2[item.Value] = item.Key;
  62.         }
  63.     }
  64. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы