Подсчет прописных и строчных букв - 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);
}

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


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

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

14   голосов , оценка 3.786 из 5
Похожие ответы