SERGE_BLIZNUK
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Код: const Povtor = '#повтор#'; WordDelimiters : set of char = [' ',',','.','-','!','?',':',';',')','(']; var S, NewString, EndS : string; OneWord, CurWord : string; i, j : integer; begin {Readln(S);} S := 'вот будет пример строчки, вот в ней слова, и вот будет на слова готова, вот.'; WriteLn; WriteLn('Строка до обработки:'); WriteLn(S); WriteLn; OneWord := ''; NewString := ''; i:=1; while i<=length(S) do begin if S[i] in WordDelimiters then begin NewString := NewString + OneWord + S[i]; if OneWord<>'' Then {нашли одно слово} if OneWord <> Povtor then begin {обработаем строчку S от символа с номером i+1 до конца} EndS := ''; CurWord := ''; for j:=i+1 to Length(S) do begin if S[j] in WordDelimiters then begin if (CurWord<>'') and (CurWord=OneWord) then EndS := EndS + Povtor + S[j] else EndS := EndS + CurWord + S[j]; CurWord := ''; end else CurWord := CurWord + S[j]; end; {это если до конца строки дошли, а в конце нет разделителя} if (CurWord<>'') and (CurWord=OneWord) then EndS := EndS + Povtor else EndS := EndS + CurWord; {ВНИМАНИЕ! строчку с заменённым кодом переносим в S} S := NewString + EndS; end; OneWord := ''; end else OneWord := OneWord + S[i]; i := i + 1; end; if OneWord<>'' Then NewString := NewString + OneWord; WriteLn('Строка после обработки:'); WriteLn(NewString); end. | |