Требование использовать множества это чья-то прихоть или сойдут массивы? Дело в том, что множества не хранят дубликаты. Т. е. некое множество натуральных чисел не может содержать несколько одинаковых элементов. Поэтому, массив в сочетании с множеством (если очень надо). Короче, вот так
const
Cifr = ['1'..'9'];
var
A : array[0..9] of Integer;
i : Integer;
s : String;
begin
Write('s = '); Readln(s);
For i:=1 to Length(s) do
if s in Cifr then Inc(A[Ord(s)-48]);
for i:= 0 to 9 do WriteLn(i, ' ', A);
// все, массив А содержит количество каждой цифры в строке для соответствующего индекса. Остается найти элементы равные трем и вывести их индексы. Т. е. элемент А [9] будет содержать количество девяток в строке
Ну прежде всего, вам надо сменить тип у Cstr
т. к. set of char - множество, а элементы множества в Pascal нельзя вводить и выводить, а также в множестве не может быть повторяющихся элементов - фактически вы полностью аннулируете проделанную ранее работу.
Cstr должен быть массивом символов.
Потом можно просто сделать цикл for внутри другого цикла for, и проходить по созданному массиву считая каких элементов сколько.