Работа с множествами, Pascal

Нужно сделать код. Пользователь вводит строку. Из нее надо сформировать 2 множества. В первом - буквы, которые повторяются в предложении. Во втором - буквы, которые входят единожды в предложение. Когда начинал пытаться делать код, думал что в множествах есть индексы, но оказалось нет. От слова совсем не понимаю как это реализовать без них. Моя задумка была перебрать каждый элемент строки и проверить, если он есть в множестве в котором хранятся буквы которые повторяются в предложении - выход из ифа, если нет, записать его в множество где буквы встречаются единожды. Дальше пока не думал как реализовывать, остановился на этом этапе из-за проблемы

var
usetText, repeatedLetters, uniqueLetters : set of string;
input,i: string;
str,n: integer;
begin 
  usetText:=[]; repeatedLetters:=[]; uniqueLetters:=[];
  write('Введите элементы множества');
  readln(input);
  str:=length(input);
  include(usetText,input);
  
  for i:=1 to str do
  begin
    if usetText[i] in repeatedLetters then
    begin
      break;
    end
    else begin
      inlude(uniqueLetters,usetText[i]); 
    end;
  end;
end.

Ответы (2 шт):

Автор решения: Grundy

Проверить наличие элемента в множестве можно с помощью оператора in.

Однако в вопросе проблема в другом.

  1. Неверно задан тип множества: так как в множестве хранятся буквы, а не строки, тип должен быть например set of char

  2. переменная i объявлена как строка, однако используется в качестве счетчика цикла. Вместо этого нужно было объявлять ее как integer

  3. переменная usetText не нужна, так как в нее просто сохраняется введенная строка. Вместо этого можно было получать символы прямиком из строки по индексу.

  4. сам алгоритм тоже не совсем верный. Решение может быть следующим

    1. если символ в множестве повторяющихся символов - переходим к следующей итерации
    2. если символ в множестве уникальных символов
      1. удаляем из уникальных
      2. добавляем в повторяющиеся
      3. переходим к следующей итерации
    3. если дошли до этого пункта - добавляем символ в множество уникальных.
→ Ссылка
Автор решения: Дмитрий

Готовый код к заданию выше

var repeatedLetters, uniqueLetters : set of char;
input: string;
x: char;
str,i: integer;
begin 
  repeatedLetters:=[]; uniqueLetters:=[];
  write('Введите элементы множества');
  readln(input);
  str:=length(input);
  
  
  for i:=1 to str do
  begin
  if input[i] in uniqueLetters then begin
      x:= input[i];                     
      uniqueLetters:= uniqueLetters - [x];
      include(repeatedLetters, input[i]);
    end
    else begin
     if input[i] in repeatedLetters 
     then 
     else include(uniqueLetters, input[i]);
     end;
  end;
  writeln('Элементы которые встречались неоднократно: ', repeatedLetters ); 
  writeln('Элементы которые встречались единожды: ', uniqueLetters); 
end.
→ Ссылка