Удалить все слова, состоящие только из букв последнего слова - Pascal
Формулировка задачи:
Помогите пожалуйста решить задачку:
Дана строка символов. Разделителями слов в строке являются: Пробелы, Запятые, Точки, Двоеточия, заданные в виде множества.
Удалить все слова, состоящие только из букв последнего слова, в котором все буквы различные.
Решение задачи: «Удалить все слова, состоящие только из букв последнего слова»
textual
Листинг программы
const rz=[' ',',','.',':'];//разделители var str,s:string; i,j,k:integer; m,mp:set of char; begin writeln('Введите строку, содержащую слова, разделенные пробелами, запятыми, точками'); writeln('и двоеточиями, последнее слово из различных букв'); readln(str); str:=' '+str+' ';//добавим пробел в начало и в конец для удобства //соствим множество букв последнего слова i:=length(str)-1; m:=[]; while (i>=1)and not(str[i] in rz) do begin include(m,str[i]); dec(i); end; i:=2; //начнем со 2 символа while i<=length(str) do //пока не конец if not(str[i] in rz) and(str[i-1] in rz) then//если не разделитель, а перед ней разделитель begin s:=''; j:=i; while(j<=length(str))and not(str[j] in rz)do //пока не конец строки и не разделитель begin s:=s+str[j];//составляем слово j:=j+1;//идем вперед end; j:=1; while(j<=length(s))and(s[j] in m) do inc(j); if j>length(s) then delete(str,i,length(s))//если все буквы есть в последнем слове, удаляем else inc(i,length(s));//иначе перешагиваем end else inc(i);//пропускаем разделители delete(str,1,1);//удалим первый пробел writeln(str); end.
Объяснение кода листинга программы
- Объявляются константа
rz
, которая содержит разделители (пробел, запятая, точка, двоеточие), и переменныеstr
,s
типа строка, а такжеi
,j
,k
типа integer иm
,mp
типа set of char. - Пользователю предлагается ввести строку, которая будет содержать слова, разделенные пробелами, запятыми, точками и двоеточием, а последнее слово должно состоять из различных букв.
- Введенная строка сохраняется в переменной
str
. - К строке добавляются пробелы в начало и в конец для удобства дальнейшей обработки.
- Формируется множество
m
, которое будет содержать буквы последнего слова. - Переменная
i
инициализируется значением длины строки минус один. - В цикле пока не достигнут конец строки и не будет разделителя перед текущим символом, добавляются буквы в множество
m
. - Переменная
i
уменьшается на единицу. - В цикле пока текущий символ не является разделителем и следующая за ним позиция не является разделителем, формируется слово
s
. - Если все буквы слова
s
есть в множествеm
, то текущий символ удаляется из строкиstr
. - Если все буквы слова
s
есть в множествеm
, то текущая позиция увеличивается на длину словаs
. - Если все буквы слова
s
есть в множествеm
, то текущая позиция увеличивается на единицу. - Удаляется первый пробел в начале строки
str
. - Выводится отформатированная строка
str
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д