Удалить все слова, состоящие только из букв последнего слова - 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.

Объяснение кода листинга программы

  1. Объявляются константа rz, которая содержит разделители (пробел, запятая, точка, двоеточие), и переменные str, s типа строка, а также i, j, k типа integer и m, mp типа set of char.
  2. Пользователю предлагается ввести строку, которая будет содержать слова, разделенные пробелами, запятыми, точками и двоеточием, а последнее слово должно состоять из различных букв.
  3. Введенная строка сохраняется в переменной str.
  4. К строке добавляются пробелы в начало и в конец для удобства дальнейшей обработки.
  5. Формируется множество m, которое будет содержать буквы последнего слова.
  6. Переменная i инициализируется значением длины строки минус один.
  7. В цикле пока не достигнут конец строки и не будет разделителя перед текущим символом, добавляются буквы в множество m.
  8. Переменная i уменьшается на единицу.
  9. В цикле пока текущий символ не является разделителем и следующая за ним позиция не является разделителем, формируется слово s.
  10. Если все буквы слова s есть в множестве m, то текущий символ удаляется из строки str.
  11. Если все буквы слова s есть в множестве m, то текущая позиция увеличивается на длину слова s.
  12. Если все буквы слова s есть в множестве m, то текущая позиция увеличивается на единицу.
  13. Удаляется первый пробел в начале строки str.
  14. Выводится отформатированная строка str.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы