呵呵,今天试了一下,写出来一段,反正我自己输了不少字符串测试都行的
就是找到的最长相同字符串会出现重复,比如:
a111111d
d111121d -> 1111,1111,1111
DNChen:满足你的要求吗?
{
a,b放置比较的两个字符串,无先后次序之分
c,d是工作字符串,r存放找出的所有相同字符串
maxlen指出相同字符串重的最大长度
思想: a固定不动,b从左向右依次与a比较
例: a='12345' b='345'
c ==12345==
b 345 -> d ---------
-----------
c ==12345==
b 345 -> d ---------
-----------
c ==12345==
b 345 -> d ---------
-----------
c ==12345==
b 345 -> d ---------
-----------
c ==12345==
b 345 -> d ----345--
-----------
c ==12345==
b 345 -> d ---------
-----------
c ==12345==
b 345 -> d ---------
form1有edit1,edit2,edit3三个文本框,一个button1按钮
}
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c,d:string;
i,j,k,la,lb,lc:integer;
r:array of string;
rp,maxlen:integer;
begin
rp:=0;
setlength(r,1);
a:=edit1.text;
b:=edit2.text;
la:=length(a);
lb:=length(b);
if (la=0) or (lb=0) then exit;
lc:=la+lb*2-2;
setlength(c,lc+1);
c:=stringofchar(' ',lc);
for i:=lb to la+lb-1 do
c:=a[i-lb+1];
for i:=1 to la+lb-1 do
begin
d:=stringofchar('-',lc);
for j:=1 to lb do
d[i+j-1]:=b[j];
for j:=1 to lc do
if c[j]=d[j] then d[j]:=c[j] else d[j]:='-';
//找出最多的一次匹配
k:=1;
repeat
if d[1]='-' then
d:=copy(d,2,length(d)-1)
else begin
k:=k+1;
if d[k]='-' then
begin
rp:=rp+1;
setlength(r,length(r)+1);
r[rp]:=copy(d,1,k-1);
d:=copy(d,k,length(d)-k+1);
k:=1;
end;
end;
until length(d)=0;
end;
maxlen:=0;
for i:=1 to length(r)-1 do
begin
if length(r)>maxlen then maxlen:=length(r);
end;
edit3.text:='';
if maxlen>0 then
for i:=1 to length(r)-1 do
if length(r)=maxlen then
edit3.text:=edit3.text+r+',';
end;