如何比较两个字符串是否相同,并返回两者不同之处(100分)

  • 主题发起人 主题发起人 ledo
  • 开始时间 开始时间
L

ledo

Unregistered / Unconfirmed
GUEST, unregistred user!
如何比较两个字符串是否相同,并返回不同之处。
如:

字符串1:"曾经有一个真挚的爱情摆在我的面前"

比较

字符串2:"摆在曾有一个挚的爱经的面前"

两个字符串比较,字符串1比字符串2多出:"真、情、我"三个字
 
如果只是比较两个字符串是否相同则很容易

var
A, B: String;
.....
A:='曾经有一个真挚的爱情摆在我的面前';
B:='曾经有一个挚的爱摆在的面前';
if a <> B then showmessage('两个字符串不相同')
then showmessage('相同');

但是如果要跟你一样找出多出的字我想是实现不了的,
或者是我太菜,不知哪位高手可以出来指教?

 
定义两个数组,分别把两个字符串写入两个数组,然后对数组各自进行排序
循环比较,相同的同时将两个数组里的值删除,知道比较完 ,看数组里还有没有其他值
结果马上就出来了
 
function tform1.comparestring(str1,str2:string):string;
var
temp,temp1,temp2,i:integer;
begin
temp1 := length(str1) ;
temp2 := length(str2) ;
if temp1>temp2 then temp:=temp1 else temp:=temp2;
for i:=1 to temp do
begin
if str1<>str2 then
begin
result :=result + '第'+inttostr(i)+'个'+str1+'与'+str2;
end;
end;
end;
 

比较有一定的复杂性,在下面的过程基础上修改是不难实现的:
procedure CompareStr(Str1,Str2:string;var defference:string);
var j,i,n1,n2:integer;
begin
defference:=''; n1:=length(Str1); n2:=length(Str2); i:=1;
while((i<n1) and (i<n2)) do begin
if Str1<>Str2 then defference:=defference+Str1;
inc(i);
end;
for j:=i to n1 do defference:=defference+Str1[j];
for j:=i to n2 do defference:=defference+Str2[j];
end;
 
将如下代码加到你的一个ButtonClick事件中,看看结果:
procedure TMyForm.Button1Click(Sender: TObject);
const
ts1 = '曾经有一个真挚的爱情摆在我的面前';
ts2 = '摆在曾有一个挚的爱经的面前';
var
s1,s2,s3,s4,s5: WideString;
i:integer;
begin
s1:=ts1;
s2:=ts2;
//s3用于临时存储单个字符而已
s4:='第1个字符串比第2个字符串多出:';
//s4用于存储第1个字符串中的那些不存在于第2个字符串里的字符
s5:='第2个字符串比第1个字符串多出:';
//s5用于存储第2个字符串中的那些不存在于第1个字符串里的字符
for i:=1 to Length(s1) do
begin
s3:=s1;
if pos(s3,s2)=0 then
s4:=s4+'"'+s3+'"';
end;
for i:=1 to Length(s2) do
begin
s3:=s2;
if pos(s3,s1)=0 then
s5:=s5+'"'+s3+'"';
end;
MessageDlg(s4+#13#10+S5, mtWarning, [mbOK], 0);
end;
 
不知道你的意思是不是比较两个集合的内容?看看我的思路:

s1:"曾经有一个真挚的爱情摆在我的面前a"
s2:"摆在曾有一个挚的爱经的面前b"
  ……转换为数组(元素为字符串)……
a1:("曾","经","有","一","个",......"a")  n个元素
a2:("摆","在","曾","有","一",......"b")  m个元素

for i:=n downto 1 do begin
for j:=1 to m do if a1=a2[j] then break;
if a1=a2[j] then begin
delete a1 from array a1;
delete a2[j] from array a2;
end;
end;
 
接受答案了.
 
后退
顶部