Подсчет прописных и строчных букв - C#
Формулировка задачи:
Суть программы такова, что она считает прописные, строчные буквы, а так же говорит каким является предложение(вопросит, воскл...) хотелось бы добавить немецкий язык, чтобы он воспринимал и его.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _54Вариант { class Program { static string symbolsPunctuation = "?!.";//набор символов, на которые может заканчиваться предложение static byte[] arrCodeSymbolsPunctuation = getBytesString(symbolsPunctuation);//преобразуем в массив байтов строку, созданную выше static char symEndString(string str)//метод типа char (символ), передаем в него строку { return str[str.Length - 1];//возвращает последний символ строки (предложения) } static string getRandomSetSymbols(int countSymbols)//метод возвращает строку из рандомных символов, в него передаем длину этой строки { List<byte> listBytes = new List<byte>();//создаем список элементов типа byte(целое число от 0 до 255) Random r = new Random();//создаем экземпляр класса Random for (int i = 0; i < countSymbols; i++)//открываем цикл от 0 до количества символов, которое передали в мтеод listBytes.Add((byte)r.Next(192, 255));//добавляем в список рандомное число от 192 до 255 (в таблице символов строчные и прописные буквы как раз лежат в этом промежутке) return Encoding.GetEncoding(1251).GetString(listBytes.ToArray()) + symbolsPunctuation[new Random().Next(0, symbolsPunctuation.Length)]; //возвращаем преобразованную строку из созданного списка (кодировка 1251 означает, что мы можем использовать кириллицу) + добавляем рандомный знак на конец предложения (? или ! или .) //также для этого используем экземпляр класса Random, в метод Next передаем парамметры 0 и длинну строки символов (?!.), т.е. рандомим от 0 до 3 } static int getRandomNumber(int minCountNumber, int maxCountNumber)//метод возвращает целое рандомное число в промежутке от переданных значений { return new Random().Next(minCountNumber, maxCountNumber);//также используем класс Random для случайного значения } static byte[] getBytesString(string str)//метод, который возвращает массив байтов строки, в него передаем переменную типа string { return Encoding.GetEncoding(1251).GetBytes(str);//возвращаем массив, используя класс Encoding в указанной кодировке (1251 - это кириллица) } static int getCountUpperLetters(string str)//метод возвращает количество прописных букв, в него передаем строку, из которой будем искать те самые символы (прописные буквы) { int count = 0;//инициализируем счетчик byte[] tempArr = getBytesString(str);//создаем массив байтов, используя метод, описанный ранее foreach (var item in tempArr)//открываем цикл foreach (отличается от for тем, что не используется итератор) if ((item >= 192 && item <= 223) && isContainsSymbolsPunctuation(item) == false)//если текущий символ лежит в промежутке от 192 до 223 включительно (в таблице символов ascii - это все прописные буквы) //(этот промежуток указывает на то, что код символа соответствует прописной букве) и код символа не является кодом ? или ! или . count++;//увеличиваем счетчик return count;//возвращаем счетчик } static bool isContainsSymbolsPunctuation(byte codeSym)//метод, который вернет true, если если код символа совпал с кодом ? или ! или ., иначе вернет false { bool result = false;//инициализируем переменную result foreach (var item in arrCodeSymbolsPunctuation)//открываем цикл по массиву кодов строки symbolsPunctuation if (item == codeSym)//если код текущего символа совпал { result = true;//result присваиваем true break;//выходим из цикла } return result;//возвращаем result } static int getCountLowerLetters(string str)//метод возвращает количество строчных букв, в него передаем строку, из которой будем искать те самые символы (строчные буквы) { int count = 0;//инициализируем счетчик byte[] tempArr = getBytesString(str);//создаем массив байтов, используя метод, описанный ранее foreach (var item in tempArr)//открываем цикл foreach if (item >= 224 && isContainsSymbolsPunctuation(item) == false)//если текущий код символа больше 224 (в таблице символов ascii - это все строчные буквы) count++;//увеличиваем счетчик return count;//возвращаем наш счетчик } static void answer(string str)//метод типа void (ничего не возращает), передаем в него строку (предложение по заданию) { switch(str[str.Length - 1])//смотрим его последний символов, делаем из этого вывод { case '.'://если точка Console.WriteLine("Предложение является повествовательным"); break; case '!'://если восклицательный знак Console.WriteLine("Предложение является восклицательным"); break; case '?'://если вопросительный знак Console.WriteLine("Предложение является вопросительным"); break; default://если ничего из выше перечисленного Console.WriteLine("Предложение не заканчивается на какой-либо из знаков ?, !, ."); break; } Console.WriteLine("Количество прописных букв: {0}", getCountUpperLetters(str));//здесь выводим количество прописных букв Console.WriteLine("Количество строчных букв: {0}", getCountLowerLetters(str));//здесь выводим количество строчных букв } static void menu()//метод menu, ничего не возращает, просто используем для вывода меню на экран консоли { Console.WriteLine("Выберите вариант задания"); Console.WriteLine(new string('-', 50));//строка из символа '-' длиной 50 Console.WriteLine("1. Ввести предложение с клавиатуры"); Console.WriteLine("2. Рандомный набор символов"); Console.WriteLine("3. Выход"); byte num = 0;//создаем переменную выбора пункта меню if (byte.TryParse(Console.ReadLine(), out num))//если введенное значение корректно (лежит в промежутке от 0 до 255, т.к. это тип byte) { switch (num)//читаем то, что ввели { case 1://если 1 Console.WriteLine("Введите предложение: "); answer(Console.ReadLine());//передаем в метод answer введенную строку с клавиатуры break; case 2://если 2 string randomString = getRandomSetSymbols(getRandomNumber(5, 10));//генерируем строку рандомной длины от 5 до 10 Console.WriteLine("Рандомный набор символов: {0}", randomString);//выводим ее на экран answer(randomString);//передаем в метод answer сгенерированную строку break; case 3://если 3 Environment.Exit(0);//завершаем выполнение консоли break; default://если ничего из выше перечисленного, то выводим соответствующее сообщение Console.WriteLine("Выбранный вами вариант отсутствует"); break; } } else//если значение num некорректное, то выводим соответствующее сообщение Console.WriteLine("Ввели некорректный номер варианта задания"); Console.WriteLine("Для продолжения нажмите любую клавишу"); Console.ReadKey();//ожидаем ввода какого-либо символа Console.Clear();//чистим консоль menu();//рекурсивный вызов метода menu, т.е. опять возвращаемся в начало } static void Main(string[] args) { menu();//отправная точка, вызываем метод menu для его выполнения } } }
Решение задачи: «Подсчет прописных и строчных букв»
textual
Листинг программы
const string GERMAN = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzÄÖÜßäöü"; /// <summary> /// метод возвращает строку из рандомных символов русского алфавита, в него передаем длину этой строки /// </summary> static string getRandomSetSymbolsInGerman(int countSymbols) { char[] chars = new char[countSymbols + 1]; Random r = new Random();//создаем экземпляр класса Random for (int i = 0; i < countSymbols; i++)//открываем цикл от 0 до количества символов, которое передали в мтеод { chars[i] = GERMAN[r.Next(0, GERMAN.Length)]; } chars[countSymbols] = symbolsPunctuation[r.Next(0, symbolsPunctuation.Length)]; return new string(chars); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д