Összehasonlítása a két sor
Keressen és illő különböző részsztring két sorban, öntött a teljes hossz. Eredmény - táblázat értékeit №№ kezdetei és végződések azonos és különböző fragmentumok. Dichotóm bypass, nagy sebességgel.
Beletelt 2 sor összehasonlítani, és meghatározza, hogy mely töredékek ezek azonosak és különbözőek. Kényelmi vezetett egy string hosszát. Ugyanakkor lehetőség van vágva le, hogy hasonlítsa össze a két azonos hosszúságú, ha szükséges, bármely két sor. Nos, semmi, de trükkös a reguláris kifejezéseket, szimbólum-bölcs felsorolás nem található. RegExp pripahali sikerült, hogy a minták a megfelelő formában rám (talán kezem görbe), és egy karakter, hogy megkerülje a hosszú sorok nem akar. Ennek eredményeként, tettem ezt, lehet, hogy hasznos.
PoluchitRazlichiyaDvuhStrok funkció (Jelvények stro1 jelenti stro2. Tf = Nem definiált jelenti rDelta = 0)
Ha tf = Meghatározatlan Aztán
// ez az első iteráció bekapcsolná
// eredmények a visszatérítési érték táblázat rögzítéséről fragmentumok: № nachsim, № Kons, EstRaznitsa (logikai érték)
TF = új TablitsaZnacheny;
tf. Oszlop. Add ( "Start");
tf. Oszlop. Add ( "The End");
tf. Oszlop. Add ( "EstRaznitsa");
Ha stro1 = stro2 Akkor // nincs különbség egyáltalán
strotf = tf. Add ();
strotf. Start = 1;
strotf. Vége = StrDlina (stro2);
rDlina1 = StrDlina (stro1);
rDlina2 = StrDlina (stro2);
Ha rDlina1 <> Ezután rDlina2 // vágható azonos hosszúságú, és akkor tagadhatja
rMinDlina = Min (rDlina1 rDlina2.);
rMaksDlina = Max (rDlina1 rDlina2.);
Ha rMinDlina = rDlina1 Aztán stro2 = Leo (stro2 rMinDlina.) ENDIF;
Ha rMinDlina = rDlina2 Aztán stro1 = Leo (stro1 rMinDlina.) ENDIF;
PoluchitRazlichiyaDvuhStrok (stro1 stro2 tf ..);
// doobrabotaem különbség hossz, ha ez az írás a „farok” a hosszabb húr
Ha rMaksDlina <> 0 Then
strotf = tf. Add ();
strotf. Kiindulási rMinDlina = + 1;
strotf. Vége = rMaksDlina;
strotf. EstRaznitsa = true; // priori
// mi pedig durva (ez a táblázat soha nem lesz túl nagy, így nem lehet excel)
TF2 = tf. SkopirovatKolonki (); starER = Nem definiált; starNachalo = 0; starKonets = 0;
Minden egyes ciklus strotf TF
Ha starER <> strotf. Aztán EstRaznitsa
Ha starER <>Ezután // meghatározatlan véget ért az előző
strotf2 = TF2. Add ();
strotf2. Start = starNachalo;
strotf2. Vége = starKonets;
strotf2. EstRaznitsa = starER;
starER = strotf. EstRaznitsa;
starNachalo = strotf. Kezdés;
starKonets = strotf. Vége;
Ha starER <>Ezután // meghatározatlan véget ért az előző
strotf2 = TF2. Add ();
strotf2. Start = starNachalo;
strotf2. Vége = starKonets;
strotf2. EstRaznitsa = starER;
// rekurzív megfelelő string összehasonlító
etstro = stro1; // vonal szabványos
obrstro = stro2; // feldolgozni a húr
Posy = Int (StrDlina (obrstro) / 2);
Ha Posey = 0 Then vissza "" ENDIF; // Rendkívüli helyzet
kuset1 = Leo (etstro Posy.);
kuset2 = Átl (etstro Posy + 1);
kusobr1 = Leo (obrstro Posy.);
kusobr2 = Átl (obrstro Posy + 1);
izm1 = (kuset1 <> kusobr1);
izm2 = (kuset2 <> kusobr2);
// nézd első darabja
Ha nem, akkor izm1
strotf = tf. Add ();
strotf. ? Start = (= 0. 1. rDelta rDelta);
strotf. Vége = strotf. Kiindulási + StrDlina (kusobr1) - 1;
strotf. EstRaznitsa = false;
// Egyébként ez a rész különböző, menjen tovább a kezelést, mint külön sorban
rNachalo = (= 0. 1. rDelta rDelta?);
= + RKonets rNachalo StrDlina (kusobr1) - 1;
Ha rNachalo = rKonets // Ezután a végső fázisban, a különbség 1 szimbólum
strotf = tf. Add ();
strotf. Start = rNachalo;
strotf. Vége = rKonets;
strotf. EstRaznitsa = true;
PoluchitRazlichiyaDvuhStrok (kuset1 kusobr1 tf rDelta ...);
// Lásd a második darab
rDelta = (Posey + 1) + rDelta - (rDelta = 0. 0. 1) ?;
Ha nem, akkor izm2
strotf = tf. Add ();
strotf. Start = rDelta;
strotf. Vége = strotf. Kiindulási + StrDlina (kusobr2) - 1;
strotf. EstRaznitsa = false;
// Egyébként ez a rész különböző, menjen tovább a kezelést, mint külön sorban
= + RKonets rNachalo StrDlina (kusobr2) - 1;
Ha rNachalo = rKonets // Ezután a végső fázisban, a különbség 1 szimbólum
strotf = tf. Add ();
strotf. Start = rNachalo;
strotf. Vége = rKonets;
strotf. EstRaznitsa = true;
PoluchitRazlichiyaDvuhStrok (kuset2 kusobr2 tf rDelta ...);
// visszaadja semmit, az eredmény nem fontos