Загрузка данных
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()}");
}
}
}
}
}