Подсчет прописных и строчных букв - C#

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

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

Суть программы такова, что она считает прописные, строчные буквы, а так же говорит каким является предложение(вопросит, воскл...) хотелось бы добавить немецкий язык, чтобы он воспринимал и его.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace _54Вариант
  7. {
  8. class Program
  9. {
  10. static string symbolsPunctuation = "?!.";//набор символов, на которые может заканчиваться предложение
  11. static byte[] arrCodeSymbolsPunctuation = getBytesString(symbolsPunctuation);//преобразуем в массив байтов строку, созданную выше
  12. static char symEndString(string str)//метод типа char (символ), передаем в него строку
  13. {
  14. return str[str.Length - 1];//возвращает последний символ строки (предложения)
  15. }
  16. static string getRandomSetSymbols(int countSymbols)//метод возвращает строку из рандомных символов, в него передаем длину этой строки
  17. {
  18. List<byte> listBytes = new List<byte>();//создаем список элементов типа byte(целое число от 0 до 255)
  19. Random r = new Random();//создаем экземпляр класса Random
  20. for (int i = 0; i < countSymbols; i++)//открываем цикл от 0 до количества символов, которое передали в мтеод
  21. listBytes.Add((byte)r.Next(192, 255));//добавляем в список рандомное число от 192 до 255 (в таблице символов строчные и прописные буквы как раз лежат в этом промежутке)
  22. return Encoding.GetEncoding(1251).GetString(listBytes.ToArray()) + symbolsPunctuation[new Random().Next(0, symbolsPunctuation.Length)];
  23. //возвращаем преобразованную строку из созданного списка (кодировка 1251 означает, что мы можем использовать кириллицу) + добавляем рандомный знак на конец предложения (? или ! или .)
  24. //также для этого используем экземпляр класса Random, в метод Next передаем парамметры 0 и длинну строки символов (?!.), т.е. рандомим от 0 до 3
  25. }
  26. static int getRandomNumber(int minCountNumber, int maxCountNumber)//метод возвращает целое рандомное число в промежутке от переданных значений
  27. {
  28. return new Random().Next(minCountNumber, maxCountNumber);//также используем класс Random для случайного значения
  29. }
  30. static byte[] getBytesString(string str)//метод, который возвращает массив байтов строки, в него передаем переменную типа string
  31. {
  32. return Encoding.GetEncoding(1251).GetBytes(str);//возвращаем массив, используя класс Encoding в указанной кодировке (1251 - это кириллица)
  33. }
  34. static int getCountUpperLetters(string str)//метод возвращает количество прописных букв, в него передаем строку, из которой будем искать те самые символы (прописные буквы)
  35. {
  36. int count = 0;//инициализируем счетчик
  37. byte[] tempArr = getBytesString(str);//создаем массив байтов, используя метод, описанный ранее
  38. foreach (var item in tempArr)//открываем цикл foreach (отличается от for тем, что не используется итератор)
  39. if ((item >= 192 && item <= 223) && isContainsSymbolsPunctuation(item) == false)//если текущий символ лежит в промежутке от 192 до 223 включительно (в таблице символов ascii - это все прописные буквы)
  40. //(этот промежуток указывает на то, что код символа соответствует прописной букве) и код символа не является кодом ? или ! или .
  41. count++;//увеличиваем счетчик
  42. return count;//возвращаем счетчик
  43. }
  44. static bool isContainsSymbolsPunctuation(byte codeSym)//метод, который вернет true, если если код символа совпал с кодом ? или ! или ., иначе вернет false
  45. {
  46. bool result = false;//инициализируем переменную result
  47. foreach (var item in arrCodeSymbolsPunctuation)//открываем цикл по массиву кодов строки symbolsPunctuation
  48. if (item == codeSym)//если код текущего символа совпал
  49. {
  50. result = true;//result присваиваем true
  51. break;//выходим из цикла
  52. }
  53. return result;//возвращаем result
  54. }
  55. static int getCountLowerLetters(string str)//метод возвращает количество строчных букв, в него передаем строку, из которой будем искать те самые символы (строчные буквы)
  56. {
  57. int count = 0;//инициализируем счетчик
  58. byte[] tempArr = getBytesString(str);//создаем массив байтов, используя метод, описанный ранее
  59. foreach (var item in tempArr)//открываем цикл foreach
  60. if (item >= 224 && isContainsSymbolsPunctuation(item) == false)//если текущий код символа больше 224 (в таблице символов ascii - это все строчные буквы)
  61. count++;//увеличиваем счетчик
  62. return count;//возвращаем наш счетчик
  63. }
  64. static void answer(string str)//метод типа void (ничего не возращает), передаем в него строку (предложение по заданию)
  65. {
  66. switch(str[str.Length - 1])//смотрим его последний символов, делаем из этого вывод
  67. {
  68. case '.'://если точка
  69. Console.WriteLine("Предложение является повествовательным");
  70. break;
  71. case '!'://если восклицательный знак
  72. Console.WriteLine("Предложение является восклицательным");
  73. break;
  74. case '?'://если вопросительный знак
  75. Console.WriteLine("Предложение является вопросительным");
  76. break;
  77. default://если ничего из выше перечисленного
  78. Console.WriteLine("Предложение не заканчивается на какой-либо из знаков ?, !, .");
  79. break;
  80. }
  81. Console.WriteLine("Количество прописных букв: {0}", getCountUpperLetters(str));//здесь выводим количество прописных букв
  82. Console.WriteLine("Количество строчных букв: {0}", getCountLowerLetters(str));//здесь выводим количество строчных букв
  83. }
  84. static void menu()//метод menu, ничего не возращает, просто используем для вывода меню на экран консоли
  85. {
  86. Console.WriteLine("Выберите вариант задания");
  87. Console.WriteLine(new string('-', 50));//строка из символа '-' длиной 50
  88. Console.WriteLine("1. Ввести предложение с клавиатуры");
  89. Console.WriteLine("2. Рандомный набор символов");
  90. Console.WriteLine("3. Выход");
  91. byte num = 0;//создаем переменную выбора пункта меню
  92. if (byte.TryParse(Console.ReadLine(), out num))//если введенное значение корректно (лежит в промежутке от 0 до 255, т.к. это тип byte)
  93. {
  94. switch (num)//читаем то, что ввели
  95. {
  96. case 1://если 1
  97. Console.WriteLine("Введите предложение: ");
  98. answer(Console.ReadLine());//передаем в метод answer введенную строку с клавиатуры
  99. break;
  100. case 2://если 2
  101. string randomString = getRandomSetSymbols(getRandomNumber(5, 10));//генерируем строку рандомной длины от 5 до 10
  102. Console.WriteLine("Рандомный набор символов: {0}", randomString);//выводим ее на экран
  103. answer(randomString);//передаем в метод answer сгенерированную строку
  104. break;
  105. case 3://если 3
  106. Environment.Exit(0);//завершаем выполнение консоли
  107. break;
  108. default://если ничего из выше перечисленного, то выводим соответствующее сообщение
  109. Console.WriteLine("Выбранный вами вариант отсутствует");
  110. break;
  111. }
  112. }
  113. else//если значение num некорректное, то выводим соответствующее сообщение
  114. Console.WriteLine("Ввели некорректный номер варианта задания");
  115. Console.WriteLine("Для продолжения нажмите любую клавишу");
  116. Console.ReadKey();//ожидаем ввода какого-либо символа
  117. Console.Clear();//чистим консоль
  118. menu();//рекурсивный вызов метода menu, т.е. опять возвращаемся в начало
  119. }
  120. static void Main(string[] args)
  121. {
  122. menu();//отправная точка, вызываем метод menu для его выполнения
  123. }
  124. }
  125. }

Решение задачи: «Подсчет прописных и строчных букв»

textual
Листинг программы
  1. const string GERMAN = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzÄÖÜßäöü";
  2.  
  3. /// <summary>
  4. /// метод возвращает строку из рандомных символов русского алфавита, в него передаем длину этой строки
  5. /// </summary>
  6. static string getRandomSetSymbolsInGerman(int countSymbols)
  7. {
  8.     char[] chars = new char[countSymbols + 1];
  9.     Random r = new Random();//создаем экземпляр класса Random
  10.     for (int i = 0; i < countSymbols; i++)//открываем цикл от 0 до количества символов, которое передали в мтеод
  11.     {
  12.         chars[i] = GERMAN[r.Next(0, GERMAN.Length)];
  13.     }
  14.     chars[countSymbols] = symbolsPunctuation[r.Next(0, symbolsPunctuation.Length)];
  15.     return new string(chars);
  16. }

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


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

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

14   голосов , оценка 3.786 из 5

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

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

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