Помощь - Поиск - Пользователи - Календарь
Полная версия: Текстовая строка
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
AlexPS
А кто-нибудь знает, как написать такую прогу?
Дана текстовая строка из 50 символов. Найти кол-во и месторасположения
одинаковых цепочек символов.
(цепочка символов - набор символов между пробелеми)
volvo
AlexPS
А почему Дельфи? Это нужно с визуализацией?
AlexPS
Ну, вообще можно и без. :p2:
AlexPS
Что, ваще никто не знает, как это сделать???
volvo
AlexPS
Ну и сколько раз повторять - поиск на что? разбей строку на слова (или цепочки, как ты их называешь), при помощи вот этой функции, а потом проверяй слова на равенство...
AlexPS
Если бы вы знали, как я ненавижу поиск!!!!
volvo
AlexPS
Решений "на блюдечке" не будет... angry.gif
AlexPS
Все это конечно круто, но зацените, как я это замутил!!! Правда, наверное столько лишних действий. smile.gif

Код

{Дана текстовая строка из 50 символов. Найти кол-во и месторасположения
одинаковых цепочек символов. Цепочка символов - набор символов между
пробелами.}
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   Memo1: TMemo;
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
label 10,20;
var
st: string [50];
nom: array [1..25] of integer;
mesta: array [0..25] of integer;
slova: array[1..4, 1..25] of string[25];
pr: array [1..26] of boolean;
i,j,kolvos,p,kolod: integer;
begin
st:=Edit1.Text;
kolvos:=0;
p:=1;
i:=1;
for i:=1 to 4 do
begin
for j:=1 to 25 do slova[i,j]:='';
end;
for j:=1 to 25 do nom[j]:=0;
for j:=1 to 25 do mesta[j]:=0;
for i:=1 to 50 do
begin
if st[i]=' ' then
begin
 kolvos:=kolvos+1;
 for j:=p to i-1 do slova[1,kolvos]:=slova[1,kolvos]+st[j];
 slova[2,kolvos]:=IntToStr(p);
 slova[3,kolvos]:=IntToStr(0);
 slova[4,kolvos]:=IntToStr(1);
 p:=i+1;
end;
end;
kolvos:=kolvos+1;
 for j:=p to 50 do slova[1,kolvos]:=slova[1,kolvos]+st[j];
 slova[2,kolvos]:=IntToStr(p);
 slova[3,kolvos]:=IntToStr(0);
 slova[4,kolvos]:=IntToStr(1);
kolod:=0;

for i:=1 to 26 do pr[i]:=false;

for i:=1 to kolvos do
begin
if slova[3,i]='1' then goto 20;
for j:=i+1 to kolvos do
 begin
  if slova[1,i]=slova[1,j] then
  begin
   if slova[3,j]='1' then goto 10;
   if slova[4,i]='1' then
     begin
      slova[4,i]:='0';
      kolod:=kolod+1;
     end;
   kolod:=kolod+1;
   slova[3,j]:=IntToStr(1);
   pr[i]:=true;
  end;
10: end;
20: end;

Memo1.Lines.Add(IntToStr(kolod));
Memo1.Lines.Add('Месторасположения одинаковых цепочек');
for i:=1 to 26 do
begin
if (slova[3,i]='1') or (slova[4,i]='0') then
Memo1.Lines.Add(slova[2,i]);
end;
end;

end.


Вот так. :thanks:
volvo
AlexPS
Для дельфи на форуме есть специальный раздел...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.