type
TDelim = set of char;
function FirstWord(s: string; delim: TDelim): string;
// Первое (слева) слово в строке с разделителями
//
var
i : integer;
rez: string;
begin
i:= 1;
while s[i] in delim do
inc(i);
rez := '';
while (i<=length(s)) and (not (s[i] in delim)) do
begin
rez := rez+s[i];
inc(i);
end;
FirstWord := rez;
end;
function PurePos(subs: string; s: string; delim: TDelim): integer;
// Позиция первого "чистого" вхождения слова в строку
// например, слово <ФОРМА> не входит в строку <ИНФОРМАТИКА>
var
lenS : integer; // длина строки
lenSubs: integer; // длина подстроки
i : integer; // счетчик цикла
begin
lenS := length(s);
lenSubs := length(subs);
PurePos := 0;
for i:= 1 to lenS-lenSubs+1 do
begin
if (copy(s,i,lenSubs)=subs) and
((i=1) or (s[i-1] in delim)) and
((i=lenS-lenSubs+1) or (s[i+lenSubs] in delim)) then
begin
PurePos := i;
exit;
end;
end;
end; { pos }
// Новое
var
s, wd : string;
delim : TDelim;
printed: boolean;
begin
delim := delim+[',']+[';']+[' '];
printed:= false;
write('Enter string:');
readln(s);
s:= trim(s);
if s='' then
writeln('Sorry, your string is empty')
else
begin
wd := FirstWord(s, delim); // нашли первое слово
while (wd <> '') do
begin
delete(s, PurePos(wd, s, delim), length(wd)); // удалили первое слово
if (PurePos(wd, s, delim) = 0) then // нет других - печатаем удаленное
begin
if printed then // для красивого вывода
write(';')
else
printed := true;
write(wd);
end
else
while (PurePos(wd, s, delim)>0) do // удаляем все дубликаты
delete(s, PurePos(wd, s, delim), length(wd));
wd := FirstWord(s, delim);
end;
if printed then
writeln
else
writeln('there are no unique words');
end;
end.
nter string:папа у васи силен мама у василия
папа;васи;силен;мама;василия
Enter string:инфо инфор
инфо;инфор
Enter string:ин инфо мин
ин;инфо;мин
Enter string:ин пин дин син ин
пин;дин;син
Enter string:123 456 789 1234
123;456;789;1234
type
TDelim = set of char;
function FirstWord(s: string; delim: TDelim): string;
// Первое (слева) слово в строке с разделителями
//
var
i : integer;
rez: string;
begin
i:= 1;
while s[i] in delim do
inc(i);
rez := '';
while (i<=length(s)) and (not (s[i] in delim)) do
begin
rez := rez+s[i];
inc(i);
end;
FirstWord := rez;
end;
function PurePos(subs: string; s: string; delim: TDelim): integer;
// Позиция первого "чистого" вхождения слова в строку
// например, слово <ФОРМА> не входит в строку <ИНФОРМАТИКА>
var
lenS : integer; // длина строки
lenSubs: integer; // длина подстроки
i : integer; // счетчик цикла
begin
lenS := length(s);
lenSubs := length(subs);
PurePos := 0;
for i:= 1 to lenS-lenSubs+1 do
begin
if (copy(s,i,lenSubs)=subs) and
((i=1) or (s[i-1] in delim)) and
((i=lenS-lenSubs+1) or (s[i+lenSubs] in delim)) then
begin
PurePos := i;
exit;
end;
end;
end; { pos }
// Новое
var
s, wd : string;
delim : TDelim;
printed: boolean;
begin
delim := delim+[',']+[';']+[' '];
printed:= false;
write('Enter string:');
readln(s);
s:= trim(s);
if s='' then
writeln('Sorry, your string is empty')
else
begin
wd := FirstWord(s, delim); // нашли первое слово
while (wd <> '') do
begin
delete(s, PurePos(wd, s, delim), length(wd)); // удалили первое слово
if (PurePos(wd, s, delim) = 0) then // нет других - печатаем удаленное
begin
if printed then // для красивого вывода
write(';')
else
printed := true;
write(wd);
end
else
while (PurePos(wd, s, delim)>0) do // удаляем все дубликаты
delete(s, PurePos(wd, s, delim), length(wd));
wd := FirstWord(s, delim);
end;
if printed then
writeln
else
writeln('there are no unique words');
end;
end.
Enter string:123
123
Enter string:123 123
there are no unique words
Enter string:
Sorry, your string is empty
Enter string:123;456;1234
123;456;1234
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.