bool bmsearch char ward int position int индекс начала слова тексте in

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
bool bmsearch(char *ward,int position)
{
int i=0;//индекс начала слова в тексте
int j=0;//индекс текущего символа
int z=0,n;
struct bmslovo alfo[255];
//char mas[255];
int m=strlen(ward)-1;
int t=m;// t,m-размер слово которое ищем
//char *ch;
//создать алфовит.
while(m>0)
{
for(n=z;n>=0;n--)
{
if (ward[m]==alfo[n].bukva)
goto mmm;
}
alfo[z].bukva=ward[m];
alfo[z].line=t-m;
z++;
mmm: m--;
}//создание алфовита закончено
alfo[0].line=1;// расстояние от крайнего правого символа до конца слова.
z--;//z-размер алфовита.
char slovo[255]="abcafdfmbcabdabcabd";
bool sovpalo=false;
n=strlen(slovo);
i=t;
j=t;
WWW:while((i<n)&&(!sovpalo))
{
if(j==-1)
return true;
if(ward[j]==slovo[i])
{
i--;
j--;
}
else
{
for(m=0;m<=z;m++)//поиск несовпавшей буквы в алфовите
{
if(slovo[i]==alfo[m].bukva)
{
i=i+alfo[m].line;
j=t;
goto WWW;
}
}
j=t;
i=i+(t+1);
}
//if(j==0)
// return true;
}
return sovpalo;
}