1

Тема: Робота з множинами

Всім доброго вечора,
поставлена задача, щоб вивести з тексту (латинські літери) всі приголосні букви, які входять в текст по одному разу. Може хтось щось хороше підкаже?)


procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
s:=edit1.Text;
l:=length(s);
for i:=1 to l do
if s[i] in ['B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Z','b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z']
then //тут я і не знаю, що писати

2 Востаннє редагувалося ping (21.03.2017 23:26:15)

Re: Робота з множинами

а може в  Pascal/Delphi  є якийсь спосіб оте

s[i]

примусово зробити lowercase  і скоротити той масив приголосних вдвоє?
п.с.
якщо , звісно це допускає умова задачі.

п.п.с.
як варіант -
створюєте масив - answer
якщо літера є серед приголосних   і її нема в answer- поміщаєте її в answer
якщо літера знову є серед приголосних   і вона є  в answer- видаляєте її з answer і зі списку приголосних.

Подякували: boxerwba1

3

Re: Робота з множинами

Зробіть лічильник, приблизно так:

Прихований текст
function consonant_counter(s:string):string;
const letters = ['A'..'Z'];
const vowels = ['A','E','I','O','U'];
var counter:array['A'..'Z'] of integer;
    i, len:integer;
    c:char;
begin
    s:=UpCase(s);
    len:=Length(s);
    for c:='A' to 'Z' do begin
        counter[c]:=0;
    end;
    
    for i:=1 to len do begin
        if (s[i] in letters) and not (s[i] in vowels) then begin
            inc(counter[s[i]]);
        end;
    end;
    
    consonant_counter:='';
    for c:='A' to 'Z' do begin
        if counter[c] = 1 then begin
            consonant_counter := consonant_counter + c;
        end;
    end;
end;

Перевірка

Подякували: Torbins1