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

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

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

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

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

textual
Листинг программы
using System.Collections;
using System.Collections.Generic;
using System;
using System.Linq;
 
namespace ConsoleApplication1
{
    /// <summary>
    /// Слово
    /// </summary>
    public interface IWord : IComparable<IWord>, IComparable
    {
        /// <summary>
        ///[readonly] Свойство на чтение что бы получить слово
        /// </summary>
        String GetWord { get; }
 
        /// <summary>
        ///[readonly] Возвращает длину слова
        /// </summary>
        Int32 Lenght { get; }
 
        String ToString();
 
    }
 
    public interface ISentence : IEnumerable<IWord>
    {
        /// <summary>
        ///[readonly] Возвращает разделитель слов
        /// </summary>
        Char Separator { get; }
        /// <summary>
        ///[readonly] Возвращает колличество слов
        /// </summary>
        Int32 Count { get; }
        String ToString();
 
        /// <summary>
        /// Производит замену одного слова на другое
        /// </summary>
        /// <param name="what">Какое слово</param>
        /// <param name="then">Чем меняем</param>
        /// <returns>Новое предложение</returns>
        Sentence Replace(Word what, Word then);
 
        /// <summary>
        /// Производит замену слова по  длине на другое
        /// </summary>
        /// <param name="wordLenght">Длинна меняемых слов</param>
        /// <param name="then">Чем меняем</param>
        /// <returns>Новое предложение</returns>
        Sentence Replace(Int32 wordLenght, IWord then);
    }
 
    /// <summary>
    /// Слово
    /// </summary>
    public class Word : IWord // IComparable<Word>,IComparable можно сравнивать компоратором один объект типа слова с другим
    {
        /// <summary>
        /// Слово, доступно только в нутри класса, и не изменяемое после инициализации объекта
        /// </summary>
        private readonly String _word;
        /// <summary>
        /// Длинна слова
        /// </summary>
        private readonly Int32 _lenght;
 
        /// <summary>
        ///[readonly] Свойство на чтение что бы получить слово
        /// </summary>
        public String GetWord
        {
            get { return _word; }
        }
 
        /// <summary>
        /// Конструктор принимающие слово
        /// </summary>
        /// <param name="word"></param>
        public Word(String word)
        {
            _word = word;
            _lenght = word.Length;
        }
 
        /// <summary>
        ///[readonly] Возвращает длину слова
        /// </summary>
        public Int32 Lenght
        {
            get { return _lenght; }
        }
        public override String ToString()
        {
            return _word;
        }
        #region Реализация IComparable<Word>, IComparable
        /// <summary>
        /// Компаратор
        /// </summary>
        /// <param name="other">Объект с которым сравниваем</param>
        /// <returns>-1 0 1</returns>
        public Int32 CompareTo(IWord other)
        {
            return _lenght == other.Lenght ? String.Compare(other.GetWord, _word, StringComparison.Ordinal) : other.Lenght.CompareTo(_lenght);
        }
 
        public Int32 CompareTo(object obj)
        {
            if (obj is Word)
            {
                return CompareTo(obj as Word);
            }
            throw new ArgumentException("Некорректный тип аргумента, сравнение недопустимо!");
        }
        #endregion
    }
 
    /// <summary>
    /// Предложение
    /// </summary>
    public class Sentence : ISentence
    {
        /// <summary>
        /// Слова в предложении
        /// </summary>
        private readonly IList<IWord> _wordList;
 
        /// <summary>
        ///[readonly] Возвращает разделитель слов
        /// </summary>
        public Char Separator
        {
            get { return _separator; }
        }
        /// <summary>
        ///[readonly] Возвращает колличество слов
        /// </summary>
        public Int32 Count
        {
            get { return _wordList.Count; }
        }
        /// <summary>
        ///[readonly] разделитель слов в предложении
        /// </summary>
        private readonly Char _separator;
 
        /// <summary>
        /// Конструктор инициализируется строчкой слова разделяются указанным разделителем по умолчанию это пробел
        /// </summary>
        /// <param name="sentence">Строчка предложение</param>
        /// <param name="separator">Разделитель слов в предложении</param>
        public Sentence(String sentence, Char separator = ' ')
        {
            _wordList = new List<IWord>();
            _separator = separator;
            foreach (var item in sentence.Split(separator))
                _wordList.Add(new Word(item));
        }
        /// <summary>
        /// Конструктор инициализируется любой коллекцией Слов (в том числе массивом)
        /// </summary>
        /// <param name="collection">Коллекция Слов</param>
        /// <param name="separator">Разделитель по умолчанию пробел</param>
        public Sentence(IEnumerable<IWord> collection, Char separator = ' ')
        {
            _wordList = new List<IWord>();
            _separator = separator;
            foreach (var item in collection)
                _wordList.Add(item);
        }
 
        public override String ToString()
        {
            return _wordList.Aggregate("", (current, item) => current + item.GetWord + _separator);
        }
 
        /// <summary>
        /// Производит замену одного слова на другое
        /// </summary>
        /// <param name="what">Какое слово</param>
        /// <param name="then">Чем меняем</param>
        /// <returns>Новое предложение</returns>
        public Sentence Replace(Word what, Word then)
        {
            var temp = this.Select(item => what.CompareTo(item) == 0 ? then : item);
            return new Sentence(temp, _separator);
        }
        /// <summary>
        /// Производит замену слова по  длине на другое
        /// </summary>
        /// <param name="wordLenght">Длинна меняемых слов</param>
        /// <param name="then">Чем меняем</param>
        /// <returns>Новое предложение</returns>
        public Sentence Replace(Int32 wordLenght, IWord then)
        {
            var temp = this.Select(item => wordLenght == item.Lenght ? then : item);
            return new Sentence(temp, _separator);
        }
 
        #region Реализация IEnumerable для поддержки foreach
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
        public IEnumerator<IWord> GetEnumerator()
        {
            return _wordList.GetEnumerator();
        }
        #endregion
    }
 
    public class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("Input sentence, separator space: ");
            var inputText = Console.ReadLine();
            Int32 length;
            do
            {
                Console.WriteLine("Input length: ");
            } while (!Int32.TryParse(Console.ReadLine(), out length));
            Console.WriteLine("Input new world: ");
            IWord world = new Word(Console.ReadLine());
 
            ISentence sentence = new Sentence(inputText);
            Console.WriteLine("The original text.: ");
            Console.WriteLine(sentence.ToString());
            Console.WriteLine("The modificated text.: ");
            Console.WriteLine(sentence.Replace(length, world).ToString());
            Console.ReadLine();
        }
    }
}

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


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

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

5   голосов , оценка 4 из 5
Похожие ответы