Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно два раза. - Turbo Pascal
Формулировка задачи:
Помогите плиз!оочень нужно((((
Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно два раза.
Указание: решение задачи простое, если вы будете использо-вать множества.
Заведите три множества X1, X2 и X3 (сначала эти множества пустые). И в цикле просмотрите все символы из введенной строки. С каждым символом – маленькой латинской буквой выполняйте следующие действия:
1. Если этого символа нет в X1, то поместите его туда (после окончания цикла множество X1 содержит все символы из строки).
2. Если этот символ есть в X1 и нет в X2, то поместите этот символ в X2 (после окончания цикла множество X2 содержит все символы из строки, которые там встречаются более одного раза).
3. Если этот символ есть в X1 и в X2, то поместите этот символ в X3 (после окончания цикла множество X3 со-держит все символы из строки, которые там встреча-ются более двух раз).
После окончания цикла распечатайте в алфавитном порядке все элементы из разности множеств X2–X3.
Это будет ответ.
(Используйте цикл
for c:=’a’ to ‘z’ do
если c входит в X2–X3, то печать c. )
Решение задачи: «Дана строка. В алфавитном порядке напечатайте (по разу) все малые латинские буквы, входящие в эту строку ровно два раза.»
textual
Листинг программы
var s: string;
i: byte;
c: char;
x1, x2: set of char;
begin
x1:=[];
x2:=[];
writeln('Enter string:');
readln(s);
for i := 1 to length(s) do
if s[i] in ['a'..'z']
then if not ((s[i] in x1) or (s[i] in x2))
then include(x1, s[i])
else if (s[i] in x1) and not (s[i] in x2)
then include(x2, s[i])
else if (s[i] in x1) and (s[i] in x2)
then exclude(x1, s[i]);
x1 := x1 * x2;
if x1 = []
then write('In string there are no letters which are found exactly two times.')
else begin
writeln('Letters, meeting in string exactly two times:');
for c:='a' to 'z' do if c in x1 then write(c,' ')
end;
readln
end.
Объяснение кода листинга программы
- Создаются две пустые переменные типа set of char - x1 и x2.
- Выводится сообщение для ввода строки.
- Считывается строка от пользователя.
- В цикле for перебираются все символы входной строки.
- Проверяется, является ли текущий символ маленькой латинской буквой.
- Если символ является маленькой латинской буквой и еще не был учтен ни в x1, ни в x2, то он добавляется в x1.
- Если символ является маленькой латинской буквой и уже был учтен в x1, но не в x2, то он добавляется в x2.
- Если символ является маленькой латинской буквой и был учтен и в x1, и в x2, то он исключается из x1.
- После завершения цикла, x1 и x2 объединяются в одну строку.
- Проверяется, пустая ли получившаяся строка.
- Если строка пустая, выводится сообщение о том, что в исходной строке нет букв, встречающихся ровно два раза.
- Если строка не пустая, выводится сообщение с перечислением всех букв, встречающихся в ней ровно два раза.