• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Задачка по Delphi

  • Автор темы Guest
  • Дата начала
G

Guest

Помогите дорешать задачу по Delphi. Не могу написать то, что подчеркнуто в задании.
Задание: Имеется текст в Memo-компоненте, загружаемый из файла. Данный текст необходимо преобразовать в соответствии с заданным алгоритмом, и результат поместить в другой Memo-компонент. Преобразованный текст нужно сохранить в другой файл.
Алгоритм: Из имеющегося словаря выбрать наиболее длинное слово, в котором все буквы разные и подсчитать их колличество, например: ЛЕЙКОПЛАСТЫРЬ, НЕРЯШЛИВОСТЬ, ЧЕТЫРЕХДЮЙМОВКА.

Вот мой код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var FName: string;
begin
if OpenDialog1.Execute then
begin
FName := OpenDialog1.FileName;
Memo1.Lines.LoadFromFile(FName);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var mystr,alltext,maxstr,a:string;
i,n,max,fl:integer;
flag:boolean;
begin
alltext:=form1.Memo1.Text;
fl:=0;
max:=0;
mystr:='';
n:=length(alltext);
flag:=true;
{количество слов в тексте}
for i:=1 to n do
begin
if (alltext[i]<>' ')and(flag) then fl:=fl+1;
flag:=alltext[i]=' ';
end;
{самое длинное слово}
for i:=1 to n do
begin
if (alltext[i]<>' ') then mystr:=mystr+alltext[i]
else mystr:='';
if length(mystr)>max then
begin max:=length(mystr); maxstr:=mystr; end;
end;
str(fl,a);
form1.Label2.Caption:=a;	 // количество слов
form1.memo2.text:=maxstr; // вывод слово
end;

procedure TForm1.Button3Click(Sender: TObject);
var FName:string;
begin
SaveDialog1.FileName:=FName;
if SaveDialog1.Execute then
begin
FName := SaveDialog1.FileName;
Memo2.Lines.SaveToFile(FName);
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
memo2.Clear;
memo1.Clear;
end;

end.
За ранее благодарен за любую помощь.
 
A

acorn

вечер, внимание уже притупилось :)

вариант А:
добавить все символы в множество и сравнить кол-во элементов в множестве с длиной строки, но т.к. я не помню как работать со множествами в Delphi делаем так:

вариант Б:
Код:
isVars:= true;
for i:=1 to length(mystr)
for j:=i+1 to length(mystr)-1
if (mystr[i] = mystr[j])
begin
isVars:=false;
break;
end;
if isVars
//учитываем в поиске максимально длинных слов
 
H

hosm

Есть ф-ция Pos, она может помочь быстро найти, существует ли дубликат символа в строке.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!