Перечислить все слова каждого предложения, которые состоят из тех же букв, что и первое слово - PascalABC.NET
Формулировка задачи:
Решение задачи: «Перечислить все слова каждого предложения, которые состоят из тех же букв, что и первое слово»
uses System.Linq, System.Globalization; function SameLetters(First, Current : string) : boolean := Enumerable.SequenceEqual(First.ToCharArray().OrderBy(ch -> ch), Current.ToCharArray().OrderBy(ch -> ch)); begin var words := new List<string>; var T := ReadLnString('Введите текст:'); // var T := 'привет, хахах, лалала притев тервип лала приветт! кц рпр нен цк?'; var P := LowerCase(T).ToWords('.?!'.ToCharArray); foreach var S : String in P do begin var W := S.ToWords(' -+,"/*0123456789'.ToCharArray); words.AddRange(W.Where((st, i) -> (i > 0) and SameLetters(W[0], st))); end; if words.Count > 0 then begin words[0] := (new CultureInfo('ru-RU', False)).TextInfo.ToTitleCase(words[0]); T += ' ' + string.Join(' ', words.ToArray()) + '.'; end; WriteLn('Получен текст: ', T); end.
Объяснение кода листинга программы
В данном коде используется функция SameLetters, которая проверяет, содержат ли две строки одинаковые буквы (по сути, она проверяет, равны ли два множества букв, полученных из строк). В начале кода объявлены две переменные: words (список слов) и T (исходная строка). Затем из T получаются все слова (включая предлоги и знаки препинания) и добавляются в список words, если они состоят из тех же букв, что и первое слово. Далее из списка words удаляется первое слово (поскольку оно уже было учтено при формировании списка words), а также приводится к верхнему регистру первое слово в списке words (это делается для того, чтобы первое слово в итоговой строке было с заглавной буквы). Затем из списка words формируется строка, которая добавляется в конец исходной строки T. Наконец, итоговая строка выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д