Прошу помощи в решении следующей задачи: В тексте, от 2х до 30 слов (в них от 2х до 10 букв), после последнего слова точка. Нужно напечатать все слова отличные от последнего, предварительно преобразовав их, удаляя из слова все последующие вхождения первой буквы. Прошу помощи на pascal-e. Я вот нашёл, когда первая буква текста становится последней, а вот как проверить что эта буква уже была и удалить последующие?
| Код | uses SysUtils;
var s,s1,s2:string; i,k:integer; function ResBuk(a:string):string;{функция перестановки букв} begin insert(a[1],a,length(a)+1);{вставляем первую букву в конец} delete(a,1,1); {удаляем первую букву} ResBuk:=a; end; begin write('s: ');readln(s); insert(' ',s,pos('.',s)); {вставляем пробел перед точкой для удобства} while pos(' ',s)>0 do delete(s,pos(' ',s),1);{удаляем лишние пробелы} for i:=pos('.',s)-2 downto 1 do {ищем предпоследний перед точкой пробел} if s[i]=' ' then begin k:=i; {запоминаем его позицию} break; end; s1:=copy(s,k+1,pos('.',s)-k-2); {запоминаем последнее слово} while (pos(' ',s)>0)and(s[i]<>'.') do {пока есть пробелы и не точка} begin s2:=copy(s,1,pos(' ',s)-1); {читаем очередное слово} if s2<>s1 then writeln(ResBuk(s2)); {если не равно последнаму, выводим в измененном виде} delete(s,1,pos(' ',s)); {удаляем прочитанное слово с пробелом} end; readln end.
|
|