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