Bob103

C#_Class(VII)

Dec 8th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.91 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Text.RegularExpressions;
  7.  
  8. namespace ez
  9. {
  10.     class StringLine
  11.     {
  12.         /* Задание 9. Создать класс для работы сo строками.Разработать следующие члены класса:
  13.         1. Поле:
  14.             • string line;
  15.         2. Конструктор, позволяющий создать строку на основе заданного строкового литерала.
  16.         3. Методы, позволяющие:
  17.             • выводить на экран все символы строки, встречающиеся в ней ровно один раз;
  18.             • вывести на экран самую длинную последовательность повторяющихся символов в строке;
  19.             • подсчет количества букв, цифр и пробелов в строке.
  20.         4. Свойство, возвращающее общее количество символов в строке (доступное только для чтения);
  21.         5. Индексатор, позволяющий по индексу обращаться к соответствующему символу строки(доступный только для чтения).
  22.         6. Перегрузку:
  23.             • операции унарного !: возвращает значение true, если строка не пустая, иначе false;
  24.             • констант true и false: обращение к экземпляру класса дает значение true если
  25.             строка является палиндромом, false – противном случае;
  26.             • операции &: возвращает значение true, если строковые поля двух объектов
  27.             посимвольно равны(без учета регистра), иначе false;
  28.             • операции преобразования класса-строка в тип string (и наоборот).
  29.         Продемонстрировать работу класса. */
  30.        
  31.         private string line;
  32.        
  33.         public StringLine(string line)//конструктор
  34.         {
  35.             this.line = line;
  36.         }
  37.  
  38.  
  39.         public void Show(string line)//вывести StringLine
  40.         {
  41.             Console.WriteLine("Строка: " + line);
  42.         }
  43.  
  44.         public void GetCharLength()
  45.         {
  46.             Console.WriteLine(string.Join(", ", line.GroupBy(c => c).Where(g => g.Count() == 1).Select(g => g.Key)));
  47.             Console.WriteLine(Regex.Matches(line, @"(.)\1*").Cast<Match>().OrderByDescending(m => m.Length).First().Value);
  48.         }
  49.  
  50.  
  51.     public void GetLettersСount()
  52.         {
  53.             char[] ch = line.ToCharArray();
  54.             int figures = ch.Where((n) => n >= '0' && n <= '9').Count();
  55.             int space = ch.Where((n) => n >= ' ' && n <= ' ').Count();
  56.             Console.WriteLine($"Количество цифр: {figures}");
  57.             Console.WriteLine($"Количество пробелов в строке: {space}");
  58.         }
  59.  
  60.         public int Length
  61.         {
  62.             get
  63.             {
  64.                 return line.Length;
  65.             }
  66.         }
  67.    
  68.         public char this[int i]
  69.         {
  70.             get
  71.             {
  72.                 return line[i];
  73.             }
  74.         }
  75.        
  76.        
  77.         // Перегрузка бинарного оператора " ! ": возвращает значение true, если строка не пустая, иначе false
  78.         public static bool operator !(StringLine zero)
  79.         {
  80.             if (zero.line.Length != 0) return true;
  81.             return false;
  82.         }
  83.        
  84.        
  85.         // Перегрузка констант true
  86.         public static bool operator true(StringLine line)
  87.         {
  88.             int min = 0;
  89.             int max = line.Length - 1;
  90.             while (true)
  91.             {
  92.                 if (min > max) return true;
  93.                 char a = line[min];
  94.                 char b = line[max];
  95.                 if (char.ToLower(a) != char.ToLower(b)) return false;
  96.                 min++;
  97.                 max--;
  98.             }
  99.         }
  100.        
  101.        
  102.         // Перегрузка констант false
  103.         public static bool operator false(StringLine line)
  104.         {
  105.             int min = 0;
  106.             int max = line.Length - 1;
  107.             while (true)
  108.             {
  109.                 if (min < max) return false;
  110.                 char a = line[min];
  111.                 char b = line[max];
  112.                 if (char.ToLower(a) == char.ToLower(b)) return true;
  113.                 min++;
  114.                 max--;
  115.             }
  116.         }
  117.        
  118.         // Перегрузка операции &: возвращает значение true, если строковые поля двух объектов
  119.         public static bool operator &(StringLine A, StringLine B)
  120.         {
  121.             if (A.line.ToUpper() == B.line.ToUpper()) return true;
  122.             else return false;
  123.         }
  124.        
  125.         // Операции преобразования StringLine в тип string
  126.         public static implicit operator string(StringLine line)
  127.         {
  128.             return line.line;
  129.         }
  130.        
  131.         // Операции преобразования string в тип StringLine
  132.         public static implicit operator StringLine(string line)
  133.         {
  134.             return new StringLine(line);
  135.         }
  136.     }
  137. }
  138.  
  139.  
  140. class Program
  141.     {
  142.         static void Main()
  143.         {
  144.             string str1 = Console.ReadLine();
  145.             StringLine s = new StringLine (str1);
  146.             string str2 = Console.ReadLine();
  147.             StringLine s2 = new StringLine(str2);
  148.  
  149.             s.GetCharLength();
  150.             s.GetLettersСount();
  151.             Console.WriteLine("Количество символов={0}",s.Length);
  152.             Console.WriteLine("[0]элемент строки={0}",s[0]);
  153.            
  154.  
  155.             if (!s)
  156.             {
  157.                 Console.WriteLine("Не пустая строка");
  158.             }
  159.             else Console.WriteLine("Пустая строка");
  160.  
  161.             Console.Write("Введите 2 строку ->");
  162.            
  163.  
  164.             if (s & s2)
  165.             {
  166.                 Console.WriteLine("Два экземпляра равны");
  167.             }
  168.             else Console.WriteLine("Не равны.");
  169.  
  170.             if (s)
  171.             {
  172.                 Console.WriteLine("Строка является палиндромом");
  173.             }
  174.             else Console.WriteLine("Не палиндром");
  175.         }
  176.     }
Add Comment
Please, Sign In to add comment