Удалить из строки слова, содержащие повторяющиеся символы - Turbo Pascal
Формулировка задачи:
Дана строка, состоящая из слов. Удалить из строки слова, содержащие повторяющиеся символы.
Решение задачи: «Удалить из строки слова, содержащие повторяющиеся символы»
textual
Листинг программы
var s: string; i,p: integer; letters: set of char; flag: boolean; begin readln(s); letters:=[]; flag:=false; p:=length(s); for i:=p downto 0 do begin if (i=0) or (s[i]=' ') then begin if flag then delete(s,i+1,p-i); p:=i; letters:=[]; flag:=false; end else begin if s[i] in letters then flag:=true; letters:=letters+[s[i]]; end; end; writeln(s); readln; end.
Объяснение кода листинга программы
- В начале кода объявляются переменные: s - строка, i, p - целые числа, letters - множество символов, flag - логическое значение.
- Строка считывается из стандартного ввода.
- Создается пустое множество letters и устанавливается значение флага flag в false.
- Переменная p устанавливается равной длине строки s.
- Запускается цикл for, который проходит по каждому символу строки s, начиная с индекса p и до индекса 0 (включая 0, но не включая сам символ 0).
- Внутри цикла проверяется условие: если текущий символ - первый или пробельный, то выполняется следующая часть условия: если флаг flag равен true, то удаляется символ из строки s, начиная с индекса i+1 и до конца строки (p-i), после чего переменная p обновляется до индекса i, множество letters очищается и флаг flag устанавливается в false. Если условие не выполняется, то текущий символ добавляется в множество letters.
- После завершения цикла for выводится исходная строка s.
- Запускается цикл чтения строк, который завершается при нажатии клавиши Enter.