
A mellékelt példaprogram megnyitása előtt a StringCompare.pas-ban levő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A feladat megoldását egy függvényre bízzuk, melynek működése a következő:
Vesszük a hosszabb szöveget, majd az elejétől kezdve karakterenként összehasonlítjuk a rövidebb szöveggel mindaddig, míg ez utóbbi el nem fogy. Minden egyes karakteregyezésnél egy számlálót megnövelünk. Miután a vizsgálat végére értünk, képezünk egy százalékos értéket úgy, hogy a számlálóban kapott eredményt elosztjuk a hosszabb szöveg karakterszámával, és az egészet megszorozzuk 100-al.
Nézzük, hogyan is épül fel a komponensünk:
Először is létrehozunk két published property-t, Text1 és Text2 néven, melyekbe az összehasonlítandó szövegeket vihetjük be. Ezután létrehozunk egy StringCompare nevű függvényt, mely elvégzi az összehasonlítást. A visszatérési értéke double típusú lesz.
function TStringCompare.Compare: Double;
var
i, iMin, iMax, iSameCount: Integer;
begin
A Length() függvénnyel lekérdezzük a kapott szövegek hosszát, azaz hány karakterből is állnak, majd közülük a nagyobbat az iMax, míg a kisebbet az iMin változóban tároljuk el.
iMax:=Max(Length(Text1),Length(Text2));
iMin:=Min(Length(Text1),Length(Text2));
Az iSameCount változóban tároljuk az egyező karakterek számát, melyet a vizsgálat elején -1-re állítunk.
Egy ciklust indítunk nullától az iMax értékéig. Az iMax-ban tároljuk a hosszabb szöveg karaktereinek számát.
for i:=0 to iMax do
begin
Ha elfogyott az összehasonlítandó szöveg, akkor kilépünk a ciklusból.
Ha egyező karaktert találunk, az iSameCount értékét megnöveljük eggyel.
if FText1[i]=FText2[i] then
Inc(iSameCount)
else
break;
end;
Ha a vizsgálat során volt legalább 1 egyező karakter, akkor kiszámítjuk a már fentebb említett módon az egyezőség százalékos arányát.
if iSameCount>0 then
Result:=(iSameCount/iMax)*100
else
Amennyiben nem volt egyezőség, a függvény visszatérési értékének nullát adunk.
A példaprogramban a függvény meghívását a Button1 OnClick eseményéhez kötöttük:
procedure TForm1.Button1Click(Sender: TObject);
var
match: Double;
begin
StringCompare1.Text1:=Edit1.Text;
StringCompare1.Text2:=Edit2.Text;
match:=StringCompare1.Compare;
ShowMessage(FloatToStr(match)+' % az egyezés.');
end;
Láthatjuk, hogy a Text1 és Text2 változóknak programból adtunk értéket, azonban ha a két szöveget közvetlenül a komponensbe írjuk be, akkor is meghívható a függvény.