![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте. Нужна помощь с задачей: Создать новый текст, содержащий все слова исходного текста, которые оканчиваются
на ту же букву, что и слово максимальной длины. У меня почему-то ничего не выводится в listbox. Вот исходный код: Код:
procedure TForm1.BitBtn4Click(Sender: TObject); begin for i:=1 to length(s) do begin if s[i] in D then begin if i - prev > 1 then begin if i - prev - 1 > length(max_word) then max_word:=copy(s, prev + 1, i - prev - 1); ListBox1.Items.Add(copy(s, prev + 1, i - prev - 1)); end; prev:=i; end; end; end; Последний раз редактировалось Anthony_1998, 11.04.2019 в 12:22. |
|
#2
|
|||
|
|||
|
Вот забыл добавить:
Код:
const D = [' ', ',', '.']; Последний раз редактировалось Anthony_1998, 11.04.2019 в 12:23. |
|
#3
|
||||
|
||||
|
Не причесано, на коленке, но, работает, оптимизацию, обработку ошибок и другие разделители оставлю вам на закуску:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
fL : TStringList;
i : integer;
maxlenstr, s, s2 :string;
lastchar:char;
begin
maxlenstr:='';
s:='';
s2:='';
fL := TStringList.Create;
try
fL.Delimiter := ' ';
fL.StrictDelimiter := True;
fL.DelimitedText := edit1.text;
for i := 0 to fl.Count - 1 do
if Length(fL[i])>Length(maxlenstr) then
maxlenstr:=fL[i];
//
lastchar:= maxlenstr[length(maxlenstr)];
//
showmessage('max len word: '+maxlenstr+#13#10+'word len = '+ inttostr(length(maxlenstr))+#13#10+
'word last char = '+lastchar);
//
for i := 0 to fl.Count - 1 do
begin
s:=fL[i];
if Trim(S)<>'' then
begin
if s[length(s)] = lastchar then
s2:=s2+ ' ' + s;
end;
end;
//
memo1.Lines.add(s2);
finally
fL.Free
end;
end; |
|
#4
|
|||
|
|||
|
спасибо огромное
|