Сформировать новую строку, в которую включить слова, состоящие только из латинских букв - Turbo Pascal
Формулировка задачи:
Здравствуйте! Есть задача:
Задан текст, состоящий из слов, записанных через пробелы или запятые. Длина текста не больше 255 символов. В тексте могут быть использованы любые символы. Словом считать последовательность символов, не содержащую пробел. Необходимо введенный текст вывести на экран до и после его преобразования.
Сформировать новую строку, в которую включить слова, состоящие только из латинских букв и не содержащие букв 'q', 'r' и 'u'. Найти два первых цифровых слова и найти разность их кубов.
Помогите пожалуйста довести код до ума, я как мог пытался, но смотрится кривовато и я теперь не знаю как сделать фильтры, что бы только латинские буквы были(
Решение задачи: «Сформировать новую строку, в которую включить слова, состоящие только из латинских букв»
textual
Листинг программы
program Project1; const {Множество разделителей слов.} D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13]; {Множество букв ланитнского алфавита.} Da = ['A'..'Z', 'a'..'z']; {Множество дейсятичных цифр.} Dd = ['0'..'9']; {Множество запрещённых символов.} Dm = ['Q', 'q', 'R', 'r', 'U', 'u']; var S, SRes : String; Dw : set of Char; i, Len, LenW, Cnt, Code : Integer; N, NRes : Extended; begin repeat Writeln('----------'); Writeln('Задайте строку:'); Readln(S); {Решение.} Len := Length(S); LenW := 0; {Длина текущего слова.} Dw := []; {Множество символов из которых состоит текущее слово.} SRes := ''; {Результирующая строка.} Cnt := 0; {Счётчик цифровых слов.} NRes := 0; {Разность кубов двух первых цифровых слов.} for i := 1 to Len do {Перебор всех символов строки слева-направо.} {Если символ не является разделителем, значит он принадлежит слову.} if not (S[i] in D) then begin Inc(LenW); {Учитываем текущий символ в длине слова.} Dw := Dw + [S[i]]; {Добавляем символ во множество букв слова.} if (i = Len) or (S[i + 1] in D) then {Если обнаружен конец слова.} begin {Если слово состоит только из букв латиницы (Dw * Da = Dw) и не содержит запрещённых символов (Dw * Dm = []).} if (Dw * Da = Dw) and (Dw * Dm = []) then begin if SRes <> '' then SRes := SRes + ', '; {Разделяем слова запятыми.} SRes := SRes + Copy(S, i - LenW + 1, LenW); {Добавляем найденное слово.} end; {Если ранее было найдено менее двух цифровых слов и текущее слово является цифровым.} if (Cnt < 2) and (Dw * Dd = Dw) then begin Inc(Cnt); {Счётчик цифровых слов.} Val(Copy(S, i - LenW + 1, LenW), N, Code); {Получаем числовое значение текущего цифрового слова.} if Cnt = 1 then NRes := N * N * N {Куб текущего (первого) цифрового слова.} else NRes := NRes - N * N * N; {Разность кубов первого и текущего (второго) цифрового слова.} end; LenW := 0; {Обнуление длины текущего слова.} Dw := []; {Обнуление множества букв текущего слова.} end; end; {Ответ.} Writeln('Результирующая строка:'); Writeln(SRes); if Cnt < 2 then Writeln('В строке менее двух цифровых слов. Расчёт разности кубов отменён.') else Writeln('Разность кубов двух первых цифровых слов: ', NRes:0:0); Write('Повторить - Enter. Выход - любой символ + Enter. '); Readln(S); until S <> ''; end.
Объяснение кода листинга программы
- В программе объявлены переменные S, SRes, Dw, Len, LenW, Cnt, Code, N, NRes.
- В строке ввода задается строка.
- Программа проверяет, состоит ли строка только из латинских букв. Если да, то формируется новая строка, включающая слова, состоящие только из латинских букв.
- Для каждого символа строки программа проверяет, является ли он разделителем или буквой. Если символ является буквой, то он добавляется в множество Dw.
- Если все символы строки являются буквами, то программа проверяет, состоит ли слово только из букв латиницы и не содержит запрещенных символов. Если это так, то программа добавляет слово в результирующую строку SRes и увеличивает счетчик Cnt.
- Если в строке меньше двух цифровых слов, программа выводит сообщение об этом и отменяет расчет разности кубов.
- Если в строке есть два или более цифровых слов, программа вычисляет разность кубов первых двух цифровых слов и выводит ее.
- Программа повторяет цикл до тех пор, пока строка не станет пустой.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д