В тексте все слова заданной длины заменить указанной подстрокой, длина которой может не совпадать с длиной заменяемого слова - C#

Узнай цену своей работы

Формулировка задачи:

В процессе изучения C# столкнулась с одной задачей. Все бы ничего, но из-за требований к ее решению не получается ничего нормального сделать. Задание: В тексте все слова заданной длины заменить указанной подстрокой, длина которой может не совпадать с длиной заменяемого слова. Требования: 1) Должна создать и использовать классы Word и Sentence. 2) По возможности использовать принципы ООП. 3) Только консольное приложение. Имею небольшое представление как это делать с одним классом, но как это на два распихать и использовать ООП - не могу понять. Заранее спасибо)

Решение задачи: «В тексте все слова заданной длины заменить указанной подстрокой, длина которой может не совпадать с длиной заменяемого слова»

textual
Листинг программы
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using System;
  4. using System.Linq;
  5.  
  6. namespace ConsoleApplication1
  7. {
  8.     /// <summary>
  9.     /// Слово
  10.     /// </summary>
  11.     public interface IWord : IComparable<IWord>, IComparable
  12.     {
  13.         /// <summary>
  14.         ///[readonly] Свойство на чтение что бы получить слово
  15.         /// </summary>
  16.         String GetWord { get; }
  17.  
  18.         /// <summary>
  19.         ///[readonly] Возвращает длину слова
  20.         /// </summary>
  21.         Int32 Lenght { get; }
  22.  
  23.         String ToString();
  24.  
  25.     }
  26.  
  27.     public interface ISentence : IEnumerable<IWord>
  28.     {
  29.         /// <summary>
  30.         ///[readonly] Возвращает разделитель слов
  31.         /// </summary>
  32.         Char Separator { get; }
  33.         /// <summary>
  34.         ///[readonly] Возвращает колличество слов
  35.         /// </summary>
  36.         Int32 Count { get; }
  37.         String ToString();
  38.  
  39.         /// <summary>
  40.         /// Производит замену одного слова на другое
  41.         /// </summary>
  42.         /// <param name="what">Какое слово</param>
  43.         /// <param name="then">Чем меняем</param>
  44.         /// <returns>Новое предложение</returns>
  45.         Sentence Replace(Word what, Word then);
  46.  
  47.         /// <summary>
  48.         /// Производит замену слова по  длине на другое
  49.         /// </summary>
  50.         /// <param name="wordLenght">Длинна меняемых слов</param>
  51.         /// <param name="then">Чем меняем</param>
  52.         /// <returns>Новое предложение</returns>
  53.         Sentence Replace(Int32 wordLenght, IWord then);
  54.     }
  55.  
  56.     /// <summary>
  57.     /// Слово
  58.     /// </summary>
  59.     public class Word : IWord // IComparable<Word>,IComparable можно сравнивать компоратором один объект типа слова с другим
  60.     {
  61.         /// <summary>
  62.         /// Слово, доступно только в нутри класса, и не изменяемое после инициализации объекта
  63.         /// </summary>
  64.         private readonly String _word;
  65.         /// <summary>
  66.         /// Длинна слова
  67.         /// </summary>
  68.         private readonly Int32 _lenght;
  69.  
  70.         /// <summary>
  71.         ///[readonly] Свойство на чтение что бы получить слово
  72.         /// </summary>
  73.         public String GetWord
  74.         {
  75.             get { return _word; }
  76.         }
  77.  
  78.         /// <summary>
  79.         /// Конструктор принимающие слово
  80.         /// </summary>
  81.         /// <param name="word"></param>
  82.         public Word(String word)
  83.         {
  84.             _word = word;
  85.             _lenght = word.Length;
  86.         }
  87.  
  88.         /// <summary>
  89.         ///[readonly] Возвращает длину слова
  90.         /// </summary>
  91.         public Int32 Lenght
  92.         {
  93.             get { return _lenght; }
  94.         }
  95.         public override String ToString()
  96.         {
  97.             return _word;
  98.         }
  99.         #region Реализация IComparable<Word>, IComparable
  100.         /// <summary>
  101.         /// Компаратор
  102.         /// </summary>
  103.         /// <param name="other">Объект с которым сравниваем</param>
  104.         /// <returns>-1 0 1</returns>
  105.         public Int32 CompareTo(IWord other)
  106.         {
  107.             return _lenght == other.Lenght ? String.Compare(other.GetWord, _word, StringComparison.Ordinal) : other.Lenght.CompareTo(_lenght);
  108.         }
  109.  
  110.         public Int32 CompareTo(object obj)
  111.         {
  112.             if (obj is Word)
  113.             {
  114.                 return CompareTo(obj as Word);
  115.             }
  116.             throw new ArgumentException("Некорректный тип аргумента, сравнение недопустимо!");
  117.         }
  118.         #endregion
  119.     }
  120.  
  121.     /// <summary>
  122.     /// Предложение
  123.     /// </summary>
  124.     public class Sentence : ISentence
  125.     {
  126.         /// <summary>
  127.         /// Слова в предложении
  128.         /// </summary>
  129.         private readonly IList<IWord> _wordList;
  130.  
  131.         /// <summary>
  132.         ///[readonly] Возвращает разделитель слов
  133.         /// </summary>
  134.         public Char Separator
  135.         {
  136.             get { return _separator; }
  137.         }
  138.         /// <summary>
  139.         ///[readonly] Возвращает колличество слов
  140.         /// </summary>
  141.         public Int32 Count
  142.         {
  143.             get { return _wordList.Count; }
  144.         }
  145.         /// <summary>
  146.         ///[readonly] разделитель слов в предложении
  147.         /// </summary>
  148.         private readonly Char _separator;
  149.  
  150.         /// <summary>
  151.         /// Конструктор инициализируется строчкой слова разделяются указанным разделителем по умолчанию это пробел
  152.         /// </summary>
  153.         /// <param name="sentence">Строчка предложение</param>
  154.         /// <param name="separator">Разделитель слов в предложении</param>
  155.         public Sentence(String sentence, Char separator = ' ')
  156.         {
  157.             _wordList = new List<IWord>();
  158.             _separator = separator;
  159.             foreach (var item in sentence.Split(separator))
  160.                 _wordList.Add(new Word(item));
  161.         }
  162.         /// <summary>
  163.         /// Конструктор инициализируется любой коллекцией Слов (в том числе массивом)
  164.         /// </summary>
  165.         /// <param name="collection">Коллекция Слов</param>
  166.         /// <param name="separator">Разделитель по умолчанию пробел</param>
  167.         public Sentence(IEnumerable<IWord> collection, Char separator = ' ')
  168.         {
  169.             _wordList = new List<IWord>();
  170.             _separator = separator;
  171.             foreach (var item in collection)
  172.                 _wordList.Add(item);
  173.         }
  174.  
  175.         public override String ToString()
  176.         {
  177.             return _wordList.Aggregate("", (current, item) => current + item.GetWord + _separator);
  178.         }
  179.  
  180.         /// <summary>
  181.         /// Производит замену одного слова на другое
  182.         /// </summary>
  183.         /// <param name="what">Какое слово</param>
  184.         /// <param name="then">Чем меняем</param>
  185.         /// <returns>Новое предложение</returns>
  186.         public Sentence Replace(Word what, Word then)
  187.         {
  188.             var temp = this.Select(item => what.CompareTo(item) == 0 ? then : item);
  189.             return new Sentence(temp, _separator);
  190.         }
  191.         /// <summary>
  192.         /// Производит замену слова по  длине на другое
  193.         /// </summary>
  194.         /// <param name="wordLenght">Длинна меняемых слов</param>
  195.         /// <param name="then">Чем меняем</param>
  196.         /// <returns>Новое предложение</returns>
  197.         public Sentence Replace(Int32 wordLenght, IWord then)
  198.         {
  199.             var temp = this.Select(item => wordLenght == item.Lenght ? then : item);
  200.             return new Sentence(temp, _separator);
  201.         }
  202.  
  203.         #region Реализация IEnumerable для поддержки foreach
  204.         IEnumerator IEnumerable.GetEnumerator()
  205.         {
  206.             return GetEnumerator();
  207.         }
  208.         public IEnumerator<IWord> GetEnumerator()
  209.         {
  210.             return _wordList.GetEnumerator();
  211.         }
  212.         #endregion
  213.     }
  214.  
  215.     public class Program
  216.     {
  217.         private static void Main(string[] args)
  218.         {
  219.             Console.WriteLine("Input sentence, separator space: ");
  220.             var inputText = Console.ReadLine();
  221.             Int32 length;
  222.             do
  223.             {
  224.                 Console.WriteLine("Input length: ");
  225.             } while (!Int32.TryParse(Console.ReadLine(), out length));
  226.             Console.WriteLine("Input new world: ");
  227.             IWord world = new Word(Console.ReadLine());
  228.  
  229.             ISentence sentence = new Sentence(inputText);
  230.             Console.WriteLine("The original text.: ");
  231.             Console.WriteLine(sentence.ToString());
  232.             Console.WriteLine("The modificated text.: ");
  233.             Console.WriteLine(sentence.Replace(length, world).ToString());
  234.             Console.ReadLine();
  235.         }
  236.     }
  237. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы