Отсортировать слова заданного текста, начинающиеся с гласных букв, по второй букве - C#

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

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

1)Отсортировать слова заданного текста, начинающиеся с гласных букв, по второй букве с помощью StringBuildera. 2)Модифицировать предыдущее задание следующим образом: -для букв, слов, предложений, знаков препинания и текста создать отдельные классы. Слово должно состоять из массива букв, предложения из массива слов и знаков препинания, текст из массива предложений. Заменить последовательность табуляций и пробелов одним пробелом. -создать класс, состоящий из исполнительного метода, который выполняет описанное действие с предыдущего задания, но в качестве типов использует созданные классы. Первое еще могу (точнее имею представление), но второе, может кто знает... Вдруг Вам делать нечего), я понимаю это сложно? В интернете нашла следующее
StringBuilder sb = new StringBuilder();
    sb.AppendLine("3333");
    sb.AppendLine("2222");
    sb.AppendLine("1111");
 
    List<string> items = new List<string>(sb.ToString().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries));
    items.Sort();
    sb = new StringBuilder(string.Join("\r\n", items.ToArray()));

Решение задачи: «Отсортировать слова заданного текста, начинающиеся с гласных букв, по второй букве»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Text;
 
namespace ConsoleApplication207
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = Text.Parse("Мама мыла раму, а папа мыл аккордеон. Детишки весело играли, пока Матроскин воблу жрал.");
 
            //get words from all sentences
            var words = new List<Word>();
            foreach (var sent in text)
            foreach (var word in sent)
            if(word is Word)
                words.Add(word as Word);
 
            //sort
            words.Sort(new WordComparer());
 
            //output
            foreach(var w in words)
                Console.WriteLine(w);
 
            Console.ReadLine();
        }
    }
 
    class Letter
    {
        public Char Value;
    }
 
    interface ISentenceToken
    {
    }
 
    class Punctuation : ISentenceToken
    {
        public Char Value;
    }
 
    class Word : List<Letter>, ISentenceToken
    {
        public override string ToString()
        {
            var sb = new StringBuilder();
            foreach (var c in this)
                sb.Append(c.Value);
 
            return sb.ToString();
        }
    }
 
    class Sentence : List<ISentenceToken>
    {
    }
 
    class Text : List<Sentence>
    {
        public static Text Parse(string text)
        {
            //state machine
 
            var res = new Text();
            var sentence = new Sentence();
            var word = new Word();
 
            foreach(var c in text)
            {
                if (char.IsPunctuation(c) || char.IsSeparator(c))
                {
                    if (word.Count > 0)
                    {
                        sentence.Add(word);
                        word = new Word();
                    }
 
                    switch (c)
                    {
                        case '.':
                        case '!':
                        case '?':
                            res.Add(sentence);
                            sentence.Add(new Punctuation { Value = c });
                            sentence = new Sentence();
                            break;
                        case '\r':
                        case '\n':
                        case '\t':
                        case ' ': break;//ignore space symbols
                        default:
                            sentence.Add(new Punctuation { Value = c });
                            break;
                    }
                }
                else
                    word.Add(new Letter{Value = c});
            }
 
            return res;
        }
    }
 
    class WordComparer : IComparer<Word>
    {
        public int Compare(Word x, Word y)
        {
            //compare words by second letter (only if the words start with vowel letter)
            if (x.Count == 0 || y.Count == 0) return x.Count.CompareTo(y.Count);
            if (!IsVowel(x[0].Value) || !IsVowel(y[0].Value)) return IsVowel(x[0].Value).CompareTo(IsVowel(y[0].Value));
            if (x.Count < 2 || y.Count < 2) return x.Count.CompareTo(y.Count);
            return x[1].Value.CompareTo(y[1].Value);
        }
 
        bool IsVowel(char c)
        {
            return "уеыаоэяию".Contains(char.ToLower(c).ToString());
        }
    }
}

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


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

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

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