Ö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

Kapcsolódó cikkek