Другие языки программирования и технологии

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

Доброго времени суток.

Во-первых, не указан язык, поэтому привожу на паскале, а во вторых, вы уверены, что вопрос звучит именно так, а не вывести первые вхождения символов в текст? Если да, то сначала объявляется массив

var A : array[#0..#255] of Byte;

В котором будем хранить число вхождений символов в тексте. Затем обнулим его и подсчитаем это число вхождений для каждого символа, предполагая, что текст находится в переменной S. Если это текст в файле, то тогда организуется цикл чтения строк из файла в эту же переменную.

FillChar(A, SizeOf(A), 0);
for j:=1 to Length(S) do Inc(A[S[j]]);

Ну и, наконец, выведем только те символы, которые встречались один раз, т. е. те, для которых значение соответствующего элемента массива равно 1.

for j:=1 to Length(S) do if A[S[j]] = 1 then Write(S[j]);

В приведенном алгоритме различаются символы верхнего и нижнего регистров. Если это не требуется, то предварительно нужно текст перевести в один регистр. И, наконец, думаю, понятно, что для достаточно большого текста может быть не выведено ни одного символа. Объявление переменных и оформление прогаммы сделайте самии.

Если же все-таки требуется выводить первые вхождения символов в текст, то программа может быть такой.

program CharOrder;
uses Crt;

var
s : String; {входная строка}
j : Integer; {переменная цикла}
M : Set of Char; {множество для запоминания встретившихся символов}

begin
ClrScr;
Write('Введите текст: '); {вывод подсказки}
ReadLn(s);

M := []; {очистим множество}
for j:=1 to Length(s) do begin {сканируем входную строку}
if not (s[j] in M) then begin {символ еще не встречался}
M := M + [s[j]]; {добавим его к множеству}
Write(s[j], ' '); {и напечатаем}
end;
end;

ReadLn; {задержка}
end.

Удачи!
Берикжан Шырын Килыбаевы
Берикжан Шырын Килыбаевы
59 612
Лучший ответ

Похожие вопросы