Помогите пожалуйста хотя бы с алгоритмом.
Пусть дан текст. Распечатайте те буквы, которые встречаются в каждом слове текста только один раз.
Распечатать буквы, которые встречаются в каждом слове текста только один раз.
- Naeel Maqsudov
- Сообщения: 2551
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Понятно же в общем, что надо сканировать строку от начала до конца и подсчитывать, сколько раз какая встретилась буква.
Причём счётчиков должно быть СколькоБукв × СколькоСлов.
Потом надо просканировать все эти счётчики, и взять только те, которые насчитали ровно 1, ну и вывести буквы, соответствующие этим счётчикам.
Т.е. два цикла: сначаа по буквам, потом по счётчикам.
А вот дальнейшие детали зависят от того, по какой теме была эта задача.
Может счётчики хранить в массивах? Может использовать 2 одинаковых набора множеств (полагая что в первом флаг выставляется когда буква встретилась в первый раз, а во втором — когда последующие, а потом сделать AND этих множеств и останется ответ)? Может быть (так как количество слов заранее неизвестно) надо применять динамическое выделение памяти? А может быть нужно обнаруженные буквы заносить в динамические списки? А может быть в строки (наподобие предложенного выше примера с множествами)?
Это только то что приходит на ум в первую же минуту.
У этой задачи десятки вариантов решений!
А преподаватель наверняка имел в виду одно-два, которые он сочтёт правильными
Скажет: "да, результат верный, но где множества, дружок?"
Причём счётчиков должно быть СколькоБукв × СколькоСлов.
Потом надо просканировать все эти счётчики, и взять только те, которые насчитали ровно 1, ну и вывести буквы, соответствующие этим счётчикам.
Т.е. два цикла: сначаа по буквам, потом по счётчикам.
А вот дальнейшие детали зависят от того, по какой теме была эта задача.
Может счётчики хранить в массивах? Может использовать 2 одинаковых набора множеств (полагая что в первом флаг выставляется когда буква встретилась в первый раз, а во втором — когда последующие, а потом сделать AND этих множеств и останется ответ)? Может быть (так как количество слов заранее неизвестно) надо применять динамическое выделение памяти? А может быть нужно обнаруженные буквы заносить в динамические списки? А может быть в строки (наподобие предложенного выше примера с множествами)?
Это только то что приходит на ум в первую же минуту.
У этой задачи десятки вариантов решений!
А преподаватель наверняка имел в виду одно-два, которые он сочтёт правильными
Скажет: "да, результат верный, но где множества, дружок?"
Эта задачка по теме "множества" мне получается вот это надо сделать?(использовать 2 одинаковых набора множеств и тд.)
Я бы сделал так: создал одно "мастер-множество", содержащее в себе все буквы алфавита, и одно пустое множество - на очередное слово. Прочитываем слово, идем по буквам. Если очередная буква отсутствует в множестве - записываем ее в множество, если присутствует - буква встречается в одном слове более одного раза, так что удаляем ее из мастер-множества.
Непонятно, что делать с буквами, которые в словах вообще отсутствуют.
Непонятно, что делать с буквами, которые в словах вообще отсутствуют.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Помогите доделать программу
Пусть дан текст. Распечатайте те буквы, которые встречаются в каждом слове текста только один раз.
Пусть дан текст. Распечатайте те буквы, которые встречаются в каждом слове текста только один раз.
Код: Выделить всё
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.