В тексте все слова заданной длины заменить указанной подстрокой, длина которой может не совпадать с длиной заменяемого слова - 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();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д