版本:Release
优化选项:O2
调试工具:OD
源码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
char fail[MAX_SIZE];
void failure(char* pat)
{
int n=strlen(pat);
int i,j;
fail[0]=-1;
for(j=1;j<n;j++)
{
i=fail[j-1];
while((pat[i+1]!=pat[j])&&(i>=0))
i=fail[i];
if(pat[i+1]==pat[j])
fail[j]=i+1;
else
fail[j]=-1;
}
}
int match(char *string,char *pat)
{
int lenp,lens,i,j;
failure(pat);
i=j=0;
lens=strlen(string);
lenp=strlen(pat);
while(i<lens&&j<lenp)
{
if(string[i]==pat[j])
{
i++;j++;
}
else
if(j==0) i++;
else
j=fail[j-1]+1;
}
return j==lenp?i-lenp:-1;
}
int main()
{
char s[100]="abcdsdfsdfassdfwefjkjfelkf";
char a[10]="dsdf";
int q=match(s,a);
printf("%d",q);
system("pause");
return 0;
}
match函数的反汇编
00211060 >/$ 53 push ebx
00211061 |. 55 push ebp
00211062 |. 8B6C24 10 mov ebp, dword ptr [esp+10] ; 第二个参数
00211066 |. 56