elektryk798

szukanie_wzorca_naiwne

Mar 16th, 2017
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int dlugosc(char *lan);
  5. int sprawdz(char *tekst, char *wzor);
  6. int *sprawdz_w(char *tekst, char *wzor, int *ilosc);
  7.  
  8. int main()
  9. {
  10.     char tekst[100];
  11.     char wzor[5];
  12.     for(;;)
  13.     {
  14.         int *tab=NULL,ilosc=0,i=0,czy=0;
  15.         printf("podaj tekst: ");
  16.         fflush(stdin);
  17.         tekst[0]='\0';
  18.         scanf("%99[^\n]s",tekst);
  19.         printf("podaj wzor: ");
  20.         wzor[0]=0;
  21.         fflush(stdin);
  22.         scanf("%4[^\n]s",wzor);
  23.         if((czy=sprawdz(tekst,wzor))==-1)
  24.             break;
  25.         printf("indeks rozpoczecia wzorca: %d\n",sprawdz(tekst,wzor));
  26.         tab=sprawdz_w(tekst,wzor,&ilosc);
  27.         printf("ilosc wzorcow w tekscie: %d\n",ilosc);
  28.         for(;i<ilosc;i++)
  29.         {
  30.             printf("Indeks %d wystapienia wzorca: %d\n",i+1,tab[i]);
  31.         }
  32.     }
  33. }
  34.  
  35. int dlugosc(char *lan)
  36. {
  37.     int i=0;
  38.     while(lan[i]!='\0')
  39.         i++;
  40.     return i;
  41. }
  42. int sprawdz(char *tekst, char *wzor)
  43. {
  44.     int i=0,j=0,text_len=dlugosc(tekst),pattern_len=dlugosc(wzor);
  45.     for(i=0;i<text_len;i++)
  46.     {
  47.         if(tekst[i]!=wzor[0])
  48.             continue;
  49.         for(j=0;j<pattern_len;j++)
  50.         {
  51.             if(tekst[i+j]!=wzor[j])
  52.                 break;
  53.         }
  54.         if(j==pattern_len)
  55.             return i;
  56.         if(text_len-(i+1)<pattern_len)
  57.             return -1;
  58.     }
  59.     return -1;
  60. }
  61.  
  62. int *sprawdz_w(char *tekst, char *wzor, int *ilosc)
  63. {
  64.     int i=0,j=0,text_len=dlugosc(tekst),pattern_len=dlugosc(wzor),*tab=NULL,ile=0;
  65.     for(i=0;i<text_len;i++)
  66.     {
  67.         if(tekst[i]!=wzor[0])
  68.             continue;
  69.         for(j=0;j<pattern_len;j++)
  70.         {
  71.             if(tekst[i+j]!=wzor[j])
  72.                 break;
  73.         }
  74.         if(j==pattern_len)
  75.         {
  76.             tab=(int*)realloc(tab,(ile+1)*sizeof(int));
  77.             tab[ile]=i;
  78.             ile++;
  79.         }
  80.         if(text_len-(i+1)<pattern_len)
  81.             break;
  82.     }
  83.     *ilosc=ile;
  84.     return tab;
  85. }
Add Comment
Please, Sign In to add comment