Задачка по Delphi

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

Гость
#1
Помогите дорешать задачу по 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.
За ранее благодарен за любую помощь.
 

acorn

PHP Developer
29.08.2004
585
3
29
Минск
soccerlist.ru
#3
вечер, внимание уже притупилось :)

вариант А:
добавить все символы в множество и сравнить кол-во элементов в множестве с длиной строки, но т.к. я не помню как работать со множествами в 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
//учитываем в поиске максимально длинных слов
 

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#4
Есть ф-ция Pos, она может помочь быстро найти, существует ли дубликат символа в строке.