Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- int pr(char *a,char *b, int d_a, int d_b)
- {
- int i=0,j,k=0;
- while(i<=d_a-d_b)
- {
- j=0;
- while(a[i+j]==b[j]&&j<d_b)
- {
- j++;
- k++;
- }
- k++;
- if (j==d_b) printf("%d ",i+1);
- //выводим место нахождения строки в подстроке
- //если все символы оказались равны, то счётчик равен длине подстроки
- i++; //в любом случае сдвигаем начало сравнения
- }
- printf("kol-vo sravneniy: %d \n", k);
- return(k);
- }
- int bm(char *y, char *x, int n, int m) //y-строка, x-образец, n-длина y, m-длина x
- {
- int a, i=0, j, tab[256], k=0;
- char ch;
- for(a=0;a<256;a++) tab[a]=m; //присваиваем всем элементам максимальное значение
- for(j=0;j<m-1;j++) tab[x[j]]=m-j-1; //элементам массива х номера/числа. последний элемент =max знач, потому что идем до м-1
- while(i<=n-m) //идем, пока в строке не будет места для подстроки
- {
- ch=y[i+m-1]; // y[начало+длина x-1]/ окончание сравнения
- for(j=0;j<m;++j)//запоминаем число сравнений
- {
- k++;
- if(x[j]!=y[i+j]) break;//если элемент образца не равен эл строки, выходим
- }
- if(j==m) printf("%d ",i+1); //если длина подстроки равна длине массива x, выводим начало подстроки
- i+=tab[ch]; //смещение на начало подстроки и кол-во чисел
- }
- printf("kol-vo sravneniy: %d \n", k);
- return(k);
- }
- void main()
- {
- char a[50],b[50];
- int i=0, k=0,d_a,d_b,t=0;
- puts("vvedite stroki: ");
- gets(a);
- printf("\n");
- gets(b);
- d_a=strlen(a);
- d_b=strlen(b);
- pr(a,b,d_a,d_b);
- printf("\n========\n \n");
- bm(a,b,d_a,d_b);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement