Распечатать буквы, которые встречаются в каждом слове текста только один раз.

Ответить
Chowder
Сообщения: 8
Зарегистрирован: 16 мар 2014, 21:35

25 мар 2014, 19:07

Помогите пожалуйста хотя бы с алгоритмом.
Пусть дан текст. Распечатайте те буквы, которые встречаются в каждом слове текста только один раз.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

25 мар 2014, 20:44

Понятно же в общем, что надо сканировать строку от начала до конца и подсчитывать, сколько раз какая встретилась буква.
Причём счётчиков должно быть СколькоБукв × СколькоСлов.
Потом надо просканировать все эти счётчики, и взять только те, которые насчитали ровно 1, ну и вывести буквы, соответствующие этим счётчикам.
Т.е. два цикла: сначаа по буквам, потом по счётчикам.

А вот дальнейшие детали зависят от того, по какой теме была эта задача.
Может счётчики хранить в массивах? Может использовать 2 одинаковых набора множеств (полагая что в первом флаг выставляется когда буква встретилась в первый раз, а во втором — когда последующие, а потом сделать AND этих множеств и останется ответ)? Может быть (так как количество слов заранее неизвестно) надо применять динамическое выделение памяти? А может быть нужно обнаруженные буквы заносить в динамические списки? А может быть в строки (наподобие предложенного выше примера с множествами)?

Это только то что приходит на ум в первую же минуту.
У этой задачи десятки вариантов решений!
А преподаватель наверняка имел в виду одно-два, которые он сочтёт правильными ;)
Скажет: "да, результат верный, но где множества, дружок?"
Chowder
Сообщения: 8
Зарегистрирован: 16 мар 2014, 21:35

25 мар 2014, 21:20

Эта задачка по теме "множества" мне получается вот это надо сделать?(использовать 2 одинаковых набора множеств и тд.)
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

26 мар 2014, 14:41

Я бы сделал так: создал одно "мастер-множество", содержащее в себе все буквы алфавита, и одно пустое множество - на очередное слово. Прочитываем слово, идем по буквам. Если очередная буква отсутствует в множестве - записываем ее в множество, если присутствует - буква встречается в одном слове более одного раза, так что удаляем ее из мастер-множества.
Непонятно, что делать с буквами, которые в словах вообще отсутствуют.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Chowder
Сообщения: 8
Зарегистрирован: 16 мар 2014, 21:35

28 мар 2014, 21:04

Помогите доделать программу
Пусть дан текст. Распечатайте те буквы, которые встречаются в каждом слове текста только один раз.

Код: Выделить всё

var 
 i: integer;
 s,st: string;
 ws: set of Char;
begin
writeln('Введите текст');
 begin
   Readln(s);
    st:='';
     for i:=1 to Length(s) do
   begin
    if not(s[i] in ws) and (s[i]<>' ') then
    begin
    if s[i]<>' ' then ws:=ws+[s[i]];
     st:=st+s[i];
    end 
    else
     begin
       Write(st);
         st:='';
       end;
    end;
   Writeln;
 end;
      Readln;
end.
Ответить