Подсчет прописных и строчных букв - 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д