Перечислить все слова каждого предложения, которые состоят из тех же букв, что и первое слово - 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. Наконец, итоговая строка выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д