예제 #1
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения парных букв.
        /// В статистику должны попадать только пары из одинаковых букв, например АА, СС, УУ, ЕЕ и т.д.
        /// Статистика - НЕ регистрозависимая!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillDoubleLetterStats(IReadOnlyStream stream)
        {
            List <LetterStats> stats    = new List <LetterStats>();
            LetterStats        ReadChar = new LetterStats();

            foreach (string item in (stream as ReadOnlyStream).FindPairLetter())
            {
                ReadChar.Letter = item;
                ReadChar.Count  = (stream as ReadOnlyStream).NumberOfOccurrences(item);
                stats.Add(ReadChar);
            }
            stream.Dispose();
            return(stats);
        }
예제 #2
0
        /// <summary>
        /// Программа принимает на входе 2 пути до файлов.
        /// Анализирует в первом файле кол-во вхождений каждой буквы (регистрозависимо). Например А, б, Б, Г и т.д.
        /// Анализирует во втором файле кол-во вхождений парных букв (не регистрозависимо). Например АА, Оо, еЕ, тт и т.д.
        /// По окончанию работы - выводит данную статистику на экран.
        /// </summary>
        /// <param name="args">Первый параметр - путь до первого файла.
        /// Второй параметр - путь до второго файла.</param>
        static void Main(string[] args)
        {
            try
            {
                if (!File.Exists(args[0]) | !File.Exists(args[1]))
                {
                    Console.WriteLine("Одного или более файлов не существует");
                    Console.ReadKey();
                    return;
                }

                IReadOnlyStream inputStream1 = GetInputStream(args[0]);
                IReadOnlyStream inputStream2 = GetInputStream(args[1]);

                Console.WriteLine("Собираем статистику из загруженных файлов...");

                IList <LetterStats> singleLetterStats = FillSingleLetterStats(inputStream1);
                IList <LetterStats> doubleLetterStats = FillDoubleLetterStats(inputStream2);

                RemoveCharStatsByType(singleLetterStats, CharType.Consonants);
                RemoveCharStatsByType(doubleLetterStats, CharType.Vowel);

                Console.WriteLine("\nСтатистика частоты вхождения буквенных символов с учётом регистра:");
                PrintStatistic(singleLetterStats);

                Console.WriteLine("\nСтатистика частоты вхождения удвоенных букв без учёта регистра:");
                PrintStatistic(doubleLetterStats);

                inputStream1.Dispose();
                inputStream2.Dispose();

                Console.ReadKey();
            }
            catch (IndexOutOfRangeException e)
            {
                Console.WriteLine($"Неверно введены аргументы командной строки.\n{e.Message}");
                Console.ReadKey();
            }
        }
예제 #3
0
        /// <summary>
        /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
        /// Статистика РЕГИСТРОЗАВИСИМАЯ!
        /// </summary>
        /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
        /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
        private static IList <LetterStats> FillSingleLetterStats(IReadOnlyStream stream)
        {
            List <LetterStats> stats    = new List <LetterStats>();
            LetterStats        ReadChar = new LetterStats();

            while (!stream.IsEof)
            {
                char c = stream.ReadNextChar();
                if (char.IsLetter(c))
                {
                    ReadChar.Letter = c.ToString();
                    ReadChar.Count  = (stream as ReadOnlyStream).NumberOfOccurrences(c);

                    /* TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - регистрозависимый.
                     * - IncStatistic - не задействовал. Логика подсчета инкапсулирована в классе ReadOnlyStream.
                     * - Коды символов отличаются в зависимости от регистра, доп. действий не требуется. */
                    stats.Add(ReadChar);
                }
            }
            (stream as ReadOnlyStream).FindPairLetter();
            // закрываем входящий поток.
            stream.Dispose();
            return(stats);
        }