Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /* run this program using the console pauser or add your own getch, system("pause") or input loop */
- int knuth_morris_pratt(char *wzor, char *napis ){
- int m=strlen(wzor);
- int n=strlen(napis);
- int p[m];
- int t=0;
- int i;
- int x=0;
- p[0]= 0 ;
- p[1]= 0;
- //tworzenie tablicy P dla szybszego przeglądania tekstu.
- for (i=2;i <= m;i++){
- while((t > 0) && (wzor[t] != wzor[i-1])){t=p[t];}
- if(wzor[t]==wzor[i-1]){t++;}
- p[i]=t;
- }
- // właściwe szukanie
- int j;
- i=1;
- j=0;
- while (i<=n-m+1){
- j=p[j];
- while ((wzor[j]==napis[i+j-1]) && (j<m)){ j++;}
- if (j==m)
- {
- printf("znaleziono dopasowanie na %d miejscu \n",i);
- x=-1;
- }
- if(j-p[j]>1)i=i+j-p[j];else i++;
- }
- return x;
- }
- void bayer_moore(char *wzor, char *napis)
- {
- //int *movTab = createMovementTab(pattern);
- int n = strlen(wzor);
- int m = strlen(napis);
- int tablicaWystapien[255];
- //tabela bayera moora odwrotnie niz w NS
- int i;
- for (i = 0; i < 255; i++) {
- tablicaWystapien[i] = n + 1;
- }
- for (i = 0; i < n; i++) {
- tablicaWystapien[(int) wzor[i]] = n - i;
- }
- i = n - 1;
- while (i < m - n + 1) {
- int trafienie = 1;
- int pozycja_w_tekscie = i;
- int j;
- for (j = i; j > i - n; j--) {
- int pozycja_we_wzorze = j - i + n - 1;
- if (napis[j] != wzor[pozycja_we_wzorze]) {
- pozycja_w_tekscie = pozycja_we_wzorze;//heurystyka oststniego wystąpienia przesunięcie do oststniego wystąpienia niezgodnego znaku we wzorcu
- trafienie = 0;
- break;
- }
- }
- if (trafienie == 1) {
- printf("Zaleziono na pozycji %d\n", i - n + 1);
- i += n;
- } else {
- i += tablicaWystapien[(int) wzor[pozycja_w_tekscie]];//heurystyka dobrego przyrostka
- }
- }
- }
- int main(int argc, char *argv[]) {
- char tekst[] = "ababababca";
- char wzorzec[] = "bab";
- //bayer_moore(wzorzec,tekst);
- // if(knuth_morris_pratt(wzorzec,tekst)==0)
- //printf("zakonczono sprawdzanie tekstu");else
- //printf(" ");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement