你所有的字符假设用Str1代替:
var
i,j:integer;
Str1:String;
begin
Str1:='ABBC';
for i:=0 to length(Str1)-2 do
begin
for j:=i+1 to length(Str1)-1 do
begin
if a=a[j] then
begin
showmessage('有重复字符串!');
break;
end else
showmessage('没有重复字符!');
end;
end;
end;
var
i: Integer;
begin
with TStringList.Create do
try
Add('A');
Add('B');
Add('B');
Add('C');
Sort; //如果已排序,则不需调用 Sort;
for i := 1 to Count -1 do begin
if Strings[i -1] = Strings then begin
ShowMessage('有重复!');
Break;
end;
end;
finally
Free;
end;
运行一下看看:
procedure TForm1.Button3Click(Sender: TObject);
var SL:TStringList;
S:String;
iPos:Integer;
begin
SL:=TStringList.Create;
SL.Add('A');
SL.Add('D');
SL.Add('C');
SL.Add('E');
SL.Add('B');
SL.Add('A');
SL.Add('B');
SL.Sorted:=True;
SL.Sort;
showmessage(SL.CommaText);
S:='B';//需要确认是否重复的字符串
SL.Sorted:=False; //防止如果重复查到的是最后出现的
iPos:=SL.IndexOf(S);
if iPos=-1 then
showmessage('不存在:'+S)
else if iPos=SL.Count-1 then
showmessage('没有重复:'+S)
else begin
if S<>SL[iPos+1] then
showmessage('没有重复:'+S)
else
showmessage('重复:'+S)
end;
end;
这个可能更好一点:
procedure TForm1.Button3Click(Sender: TObject);
var SL:TStringList;
S:String;
i,iPos:Integer;
begin
SL:=TStringList.Create;
SL.Add('A');
SL.Add('D');
SL.Add('C');
SL.Add('E');
SL.Add('B');
SL.Add('A');
SL.Add('B');
SL.Sorted:=True;
SL.Sort;
showmessage(SL.CommaText);
SL.Sorted:=False; //防止如果重复查到的是最后出现的
for i:=0 to SL.Count-1 do begin
S:=SL;//需要确认是否重复的字符串
iPos:=SL.IndexOf(S);
if iPos=-1 then
showmessage('不存在:'+S)
else if iPos=SL.Count-1 then
showmessage('没有重复:'+S)
else begin
if S<>SL[iPos+1] then
showmessage('没有重复:'+S)
else
showmessage('重复:'+S)
end;
end;
end;
不必要用循环吗?我有绝妙办法。有没有听说过文本引擎?将文本作为数据库,支持标准sql语句,那么你想想,一个 select count(textfield) as countStr from [a text file] group by textfield 不就得到所有重复的字符以及重复的次数吗?当然,字符少的话,还是用循环比较快,如果是成千上万的来比较,那用文本数据引擎吧。
以下是以前我用此方法对一文本文件进行处理的代码,要处理的文本是从EXCEL里导出来的一大批记录,虽然处理结果跟你要的不一样,但是对你会有用的。
ADOQuery2.SQL.Text:='Select cstr(phone) as [phone] from '+
'(select count(phone) as [ccc],phone as phone From '+Filename+
' group by phone)adc where ccc>1 and phone>0';
ADOQuery2.Open;
ADOQuery1.SQL.Text:='Select cstr(phone) as [phone] From '+Filename+
' where phone>0 group by phone';
ADOQuery1.Open;