Загрузка данных


using System;
using System.Text.RegularExpressions;

namespace LabWork
{
    class Program
    {
        // В методе Main находится демонстрация работы каждого задания
        static void Main(string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.UTF8;

            Console.WriteLine("=== ТЕСТИРОВАНИЕ ЗАДАНИЙ 1-8 ===");
            
            // Задание 1
            Console.WriteLine("\nЗадание 1:");
            CountZerosAndOnes("010101000 111 00");

            // Задание 2
            Console.WriteLine("\nЗадание 2:");
            string textForWords = "  Проверка  подсчета количества   слов в этой строке. ";
            Console.WriteLine($"Строка: \"{textForWords}\"");
            Console.WriteLine($"Количество слов: {CountWords(textForWords)}");

            // Задание 3
            Console.WriteLine("\nЗадание 3:");
            string textForPunct = "Привет, мир! Как дела? Что нового...:";
            Console.WriteLine($"Знаков препинания в '{textForPunct}': {CountPunctuation(textForPunct)}");

            // Задание 4
            Console.WriteLine("\nЗадание 4:");
            PrintDigits("User123, flat 45, code 9901!");

            // Задание 5
            Console.WriteLine("\nЗадание 5:");
            string textForEvens = "12 5 8 14 3 22 7";
            Console.WriteLine($"Строка чисел: {textForEvens}");
            Console.WriteLine($"Количество четных чисел: {CountEvenNumbers(textForEvens)}");

            // Задание 6
            Console.WriteLine("\nЗадание 6:");
            string textForSwap = "abcdef";
            Console.WriteLine($"Исходная: {textForSwap} -> Измененная: {SwapAdjacentChars(textForSwap)}");

            // Задание 7
            Console.WriteLine("\nЗадание 7:");
            string textForLowerCount = "Привет МИР, тут есть ТЕКСТ и буквы.";
            Console.WriteLine($"Количество строчных русских букв: {CountLowerRussianLetters(textForLowerCount)}");

            // Задание 8
            Console.WriteLine("\nЗадание 8:");
            PrintLowerRussianLetters("Пример ТЕКСТА для Вывода Букв");


            Console.WriteLine("\n\n=== ТЕСТИРОВАНИЕ ЗАДАНИЯ 9 (REGEX) ===");
            
            string contactsText = @"Контакты сотрудников:
Иван Петров, email: ivan.petrov@gmail.com, телефон: +7-999-123-45-67
Анна Смирнова, email: anna_smirnova@mail.ru, телефон: +7-(912)-555-88-99
John Smith, email: john.smith@company.com, телефон: +1-202-555-0173";

            // Часть 1
            Console.WriteLine("\nЧасть 1 (Проверка email):");
            FindAndValidateEmails(contactsText);

            // Часть 2
            Console.WriteLine("\nЧасть 2 (Извлечение телефонов):");
            ExtractPhones(contactsText);

            // Часть 3
            Console.WriteLine("\nЧасть 3 (Фильтрация по gmail.com):");
            FilterGmail(contactsText);

            // Часть 4
            Console.WriteLine("\nЧасть 4 (Замена телефонов):");
            MaskPhones(contactsText);

            // Часть 5
            Console.WriteLine("\nЧасть 5 (Структурированный вид):");
            ParseContacts(contactsText);

            Console.ReadLine(); // Остановка консоли
        }

        // ==========================================
        // БЛОК МЕТОДОВ (ЗАДАНИЯ 1-8)
        // ==========================================

        // 1. Подсчет количества нулей и единиц
        static void CountZerosAndOnes(string input)
        {
            int zeros = 0;
            int ones = 0;
            foreach (char ch in input)
            {
                if (ch == '0') zeros++;
                else if (ch == '1') ones++;
            }
            Console.WriteLine($"Нулей: {zeros}, Единиц: {ones}");
        }

        // 2. Подсчет количества слов
        static int CountWords(string input)
        {
            if (string.IsNullOrWhiteSpace(input)) return 0;
            string[] words = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            return words.Length;
        }

        // 3. Найти количество знаков препинания
        static int CountPunctuation(string input)
        {
            int count = 0;
            foreach (char ch in input)
            {
                if (char.IsPunctuation(ch)) count++;
            }
            return count;
        }

        // 4. Вывести цифры, содержащиеся в строке
        static void PrintDigits(string input)
        {
            Console.Write("Цифры в строке: ");
            foreach (char ch in input)
            {
                if (char.IsDigit(ch)) Console.Write(ch + " ");
            }
            Console.WriteLine();
        }

        // 5. Количество четных чисел, разделенных пробелами
        static int CountEvenNumbers(string input)
        {
            string[] numbers = input.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            int count = 0;
            foreach (string numStr in numbers)
            {
                if (int.TryParse(numStr, out int number))
                {
                    if (number % 2 == 0) count++;
                }
            }
            return count;
        }

        // 6. Поменять местами символы с четными и нечетными номерами (индексами)
        static string SwapAdjacentChars(string input)
        {
            char[] chars = input.ToCharArray();
            for (int i = 0; i < chars.Length - 1; i += 2)
            {
                char temp = chars[i];
                chars[i] = chars[i + 1];
                chars[i + 1] = temp;
            }
            return new string(chars);
        }

        // 7. Количество строчных русских букв
        static int CountLowerRussianLetters(string input)
        {
            int count = 0;
            foreach (char ch in input)
            {
                if ((ch >= 'а' && ch <= 'я') || ch == 'ё') count++;
            }
            return count;
        }

        // 8. Вывести на экран только строчные русские буквы
        static void PrintLowerRussianLetters(string input)
        {
            Console.Write("Строчные русские буквы: ");
            foreach (char ch in input)
            {
                if ((ch >= 'а' && ch <= 'я') || ch == 'ё') Console.Write(ch);
            }
            Console.WriteLine();
        }

        // ==========================================
        // БЛОК РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ (ЗАДАНИЕ 9)
        // ==========================================

        // Часть 1: Проверка email
        static void FindAndValidateEmails(string inputText)
        {
            string emailPattern = @"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}";
            MatchCollection matches = Regex.Matches(inputText, emailPattern);
            foreach (Match match in matches)
            {
                Console.WriteLine($"- {match.Value} (Корректен)");
            }
        }

        // Часть 2: Извлечение телефонов
        static void ExtractPhones(string inputText)
        {
            string phonePattern = @"\+?\d[- \d()]{7,20}";
            MatchCollection matches = Regex.Matches(inputText, phonePattern);
            foreach (Match match in matches)
            {
                string val = match.Value.Trim();
                if (val.Length > 7) Console.WriteLine($"- {val}");
            }
        }

        // Часть 3: Фильтрация по домену gmail.com
        static void FilterGmail(string inputText)
        {
            string gmailPattern = @"[a-zA-Z0-9._%+-]+@gmail\.com";
            MatchCollection matches = Regex.Matches(inputText, gmailPattern);
            foreach (Match match in matches)
            {
                Console.WriteLine($"- {match.Value}");
            }
        }

        // Часть 4: Замена всех номеров телефонов на ***PHONE***
        static void MaskPhones(string inputText)
        {
            string targetPattern = @"(?<=телефон:\s*)\+?[\d\s()^-]+";
            string result = Regex.Replace(inputText, targetPattern, "***PHONE***");
            Console.WriteLine(result);
        }

        // Часть 5: Структурированный вид
        static void ParseContacts(string inputText)
        {
            string[] lines = inputText.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries);
            string pattern = @"^(?<name>[\w\s]+),\s*email:\s*(?<email>[^\s,]+),\s*телефон:\s*(?<phone>.+)$";

            foreach (string line in lines)
            {
                if (line.Contains("Контакты сотрудников")) continue;

                Match match = Regex.Match(line, pattern);
                if (match.Success)
                {
                    Console.WriteLine("---------------------------------------");
                    Console.WriteLine($"Имя:     {match.Groups["name"].Value.Trim()}");
                    Console.WriteLine($"Email:   {match.Groups["email"].Value.Trim()}");
                    Console.WriteLine($"Телефон: {match.Groups["phone"].Value.Trim()}");
                }
            }
        }
    }
}