Разделитель — один из символов« ,.;:!?"'» (начиная с пробела и заканчивая апострофом). Буква — любой символ, отличный от разделителя. Слово
Условие задачи:Разделитель — один из символов« ,.;:!?"'» (начиная с пробела и заканчивая апострофом). Буква — любой символ, отличный от разделителя. Слово — последовательность букв, ограниченная с каждой стороны разделителем или концом строки. Например, в строке«x9i23!слово, ,» два слова — «x9i23» и«слово». Требуется произвести следующие действия (при всех манипуляциях со словами разделители сохранять без изменений): все слова, которые содержат заданную подстроку, заменить на «[censored]». Набор разделителей в программе необходимо представлять как множество.
Program PascalGuru; uses crt; const INS='[censored]'; label 1,2;
var s,sub:string; mn:set of char; i,j:integer; k:integer;
{проверка на верность введёной подстроки} for i:=1 to length(sub) do begin if sub[i] in mn then begin writeln('Oshibka! Vo vvedennoi podstroke soderzhutsya razdeliteli'); readln; goto 1; end; end; {конец проверки}
if not (s[length(s)] in mn) then s:=s+' '; {если строка не заканчивается разделителем - то добавляем его}
k:=1;{указатель на текущий элемент строки} 2: for i:=k to length(s) do begin if s[i] in mn then begin if pos(sub,copy(s,k,i-k))>0 then {если подстрока содержится в слове} begin for j:=k to i-1 do delete(s,k,1); {удаление подстроки} insert(INS,s,k); {её замещение} k:=k+length(INS)+1; {указатель ставим на следующий элемент} goto 2; {после замены перепрыгиываем на дальнейшую обработку строки} end; k:=i+1; {указатель также перемещаем} end; end;