Алгоритм решения этой задачи может быть следующим: заведем два множества. В первое множество будем помещать символы текста. Во второе множество символ будет помещен тогда и только тогда, когда его нет в первом множестве (символ встретился первый раз). Но символ может встретиться второй раз (он уже есть в первом множестве). Тогда удалим этот символ из второго множества. Таким образом, второе множество будет содержать символы, входящие в заданный текст только по одному разу.
Приведем текст программы:
Program Problem49_2; Var M1,M2:Set Of Char; S:String; i:Byte; Begin WriteLn('Задайте текст:'); ReadLn(S); M1:=[]; {Начальные значения множеств.} M2:=[]; For i:=1 To Length(S) Do If S[i] in M1 Then {Символ есть в 1-м множестве?} Begin If S[i] in M2 Then {Символ есть во 2-м множестве?} M2:=M2-[S[i]] {Удаляем символ из 2-го множества.} End Else {Символа нет в 1-м множестве.} Begin {Он встретился впервые.} M1:=M1+[S[i]]; {Помещаем его во} M2:=M2+[S[i]]; {множества.} End; WriteLn('Символы, входящие в текст один раз:'); If M2=[] Then WriteLn('Таких символов нет') Else For i:=1 To Length(S) Do If S[i] in M2 Then Write(A[i],' '); WriteLn; End.