Предлагаю такую схему:
1. Исходный текст разбивается на слова, из которых формируется одномерный массив типа string.
2. В цикле производится анализ элементов массива. Во вложенном цикле подсчитывается количество нужных символов в текущем слове. Одновременно определяется наибольшее количество заданных символов в слове по классической схеме.
3. Из исходного текста производится выборка слов с наибольшим количеством заданных символов. Листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
Edit1: TEdit;
ListBox1: TListBox;
Label3: TLabel;
Label4: TLabel;
ListBox2: TListBox;
Label5: TLabel;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i, n, k, j, max, s, p: integer;
stroka, simv: string;
slovo: array[1..1000] of string;
flag: boolean;
begin
ListBox1.Items.Clear;
ListBox2.Items.Clear;
// Количество строк в исходном тексте
n:=Memo1.Lines.Count;
// Индекс массива слов
k:=1;
slovo[k]:='';
for i:=0 to n-1 do
begin
stroka:=Memo1.Lines[i];
for j:=1 to length(stroka) do
begin
if (stroka[j]<>' ') and (stroka[j]<>',') and (stroka[j]<>'.') and (stroka[j]<>';') and (stroka[j]<>'!')
and (stroka[j]<>'-') and (stroka[j]<>'?')
then begin slovo[k]:=slovo[k]+stroka[j]; flag:=true; end else if flag=true then
begin k:=k+1; slovo[k]:=''; flag:=false; end;
end;
end;
for i:=1 to k do
ListBox1.Items[i-1]:=slovo[i];
// Заданный символ
simv:=Edit1.Text;
max:=0;
for i:=1 to k do
begin
stroka:=slovo[i];
p:=0;
for j:=1 to length(stroka) do
if stroka[j]=simv then p:=p+1;
if p>max then max:=p;
end;
Edit2.Text:=InttoStr(max);
s:=-1;
for i:=1 to k do
begin
stroka:=slovo[i];
p:=0;
for j:=1 to length(stroka) do
if stroka[j]=simv then p:=p+1;
if p=max then if max<>0 then begin s:=s+1; ListBox2.Items[s]:=stroka; end;
end;
end;
end.