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

            stream.ResetPositionToStart();
            if (!stream.IsEof)
            {
                c1 = Char.ToLower(stream.ReadNextChar());
            }

            while (!stream.IsEof)
            {
                c2 = Char.ToLower(stream.ReadNextChar());
                // TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - НЕ регистрозависимый.
                for (int i = 0; i < alphabetDoubleLetter.alphabet.Length; i++)
                {
                    if (c1 == alphabetDoubleLetter.alphabet[i] && c2 == alphabetDoubleLetter.alphabet[i])
                    {
                        alphabetDoubleLetter.letterCounter[i]++;
                        break;
                    }
                }
                c1 = c2;
            }
        }
Beispiel #2
0
        /// <summary>
        /// Программа принимает на входе 2 пути до файлов.
        /// Анализирует в первом файле кол-во вхождений каждой буквы (регистрозависимо). Например А, б, Б, Г и т.д.
        /// Анализирует во втором файле кол-во вхождений парных букв (не регистрозависимо). Например АА, Оо, еЕ, тт и т.д.
        /// По окончанию работы - выводит данную статистику на экран.
        /// </summary>
        /// <param name="args">Первый параметр - путь до первого файла.
        /// Второй параметр - путь до второго файла.</param>
        static void Main(string[] args)
        {
            AlphabetLetter alphabetSingleLetter = new AlphabetLetter("абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ");
            AlphabetLetter alphabetDoubleLetter = new AlphabetLetter("абвгдеёжзийклмнопрстуфхцчшщъыьэюя");

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

            //IList<LetterStats> singleLetterStats =
            FillSingleLetterStats(inputStream1, alphabetSingleLetter);
            PrintStatisticSingle(alphabetSingleLetter);


            //IList<LetterStats> doubleLetterStats =
            FillDoubleLetterStats(inputStream2, alphabetDoubleLetter);
            PrintStatisticDouble(alphabetDoubleLetter);

            Console.WriteLine("Убираем гласные.");
            RemoveCharStatsByType(alphabetSingleLetter, CharType.Vowel);
            PrintStatisticSingle(alphabetSingleLetter);

            Console.WriteLine("Убираем согласные.");
            RemoveCharStatsByType(alphabetDoubleLetter, CharType.Consonants);
            PrintStatisticDouble(alphabetDoubleLetter);

            inputStream1.Close();
            inputStream2.Close();

            // TODO : Необжодимо дождаться нажатия клавиши, прежде чем завершать выполнение программы.
            Console.Read();
        }
Beispiel #3
0
        /// <summary>
        /// Ф-ция перебирает все найденные буквы/парные буквы, содержащие в себе только гласные или согласные буквы.
        /// (Тип букв для перебора определяется параметром charType)
        /// Все найденные буквы/пары соответствующие параметру поиска - удаляются из переданной коллекции статистик.
        /// </summary>
        /// <param name="letters">Коллекция со статистиками вхождения букв/пар</param>
        /// <param name="charType">Тип букв для анализа</param>
        //private static void RemoveCharStatsByType(IList<LetterStats> letters, CharType charType)
        private static void RemoveCharStatsByType(AlphabetLetter letters, CharType charType)
        {
            // TODO : Удалить статистику по запрошенному типу букв.
            switch (charType)
            {
            case CharType.Consonants:
                for (int i = 0; i < letters.alphabet.Length; i++)
                {
                    for (int j = 0; j < ConsonantLetter.Length; j++)
                    {
                        if (Char.ToLower(letters.alphabet[i]) == ConsonantLetter[j])
                        {
                            letters.letterCounter[i] = 0;
                        }
                    }
                }
                break;

            case CharType.Vowel:
                for (int i = 0; i < letters.alphabet.Length; i++)
                {
                    for (int j = 0; j < VowelLetter.Length; j++)
                    {
                        if (Char.ToLower(letters.alphabet[i]) == VowelLetter[j])
                        {
                            letters.letterCounter[i] = 0;
                        }
                    }
                }
                break;
            }
        }
Beispiel #4
0
        /// <summary>
        /// Ф-ция выводит на экран полученную статистику в формате "{Буква} : {Кол-во}"
        /// Каждая буква - с новой строки.
        /// Выводить на экран необходимо предварительно отсортировав набор по алфавиту.
        /// В конце отдельная строчка с ИТОГО, содержащая в себе общее кол-во найденных букв/пар
        /// </summary>
        /// <param name="letters">Коллекция со статистикой</param>
        //private static void PrintStatistic(IEnumerable<LetterStats> letters)
        private static void PrintStatisticDouble(AlphabetLetter alphabetDoubleLetter)
        {
            // TODO : Выводить на экран статистику. Выводить предварительно отсортировав по алфавиту!
            //throw new NotImplementedException();
            int sum = 0;

            for (int i = 0; i < alphabetDoubleLetter.alphabet.Length; i++)
            {
                Console.WriteLine("'{0}{0}' : {1}", alphabetDoubleLetter.alphabet[i], alphabetDoubleLetter.letterCounter[i]);
                if (alphabetDoubleLetter.letterCounter[i] != 0)
                {
                    sum++;
                }
            }
            Console.WriteLine("Общее кол-во найденных пар букв: {0}\n", sum);
        }
Beispiel #5
0
 /// <summary>
 /// Ф-ция считывающая из входящего потока все буквы, и возвращающая коллекцию статистик вхождения каждой буквы.
 /// Статистика РЕГИСТРОЗАВИСИМАЯ!
 /// </summary>
 /// <param name="stream">Стрим для считывания символов для последующего анализа</param>
 /// <returns>Коллекция статистик по каждой букве, что была прочитана из стрима.</returns>
 //private static IList<LetterStats> FillSingleLetterStats(IReadOnlyStream stream, AlphabetSingleLetter alphabetSingleLetter)
 private static void FillSingleLetterStats(IReadOnlyStream stream, AlphabetLetter alphabetSingleLetter)
 {
     //stream.ResetPositionToStart();
     while (!stream.IsEof)
     {
         char c = stream.ReadNextChar();
         // TODO : заполнять статистику с использованием метода IncStatistic. Учёт букв - регистрозависимый.
         //denny7794: метод IncStatistic не используется.
         for (int i = 0; i < alphabetSingleLetter.alphabet.Length; i++)
         {
             if (c == alphabetSingleLetter.alphabet[i])
             {
                 alphabetSingleLetter.letterCounter[i]++;
                 break;
             }
         }
     }
 }