此题相对简单,跟字符串匹配相差不多,改了个返回值类型而已。
#include<stdio.h>
#include<stdlib.h>
char *search(char *src,int slen,char *patn,int plen)
{
int i = 0,j = 0;
while(i<slen && j<plen)
{
if(src[i] == patn[j])
{
i++;
j++;
}
else
{
i = i-j+1;
j=0;
}
}
if(j==plen)
return src + i - plen;
else
return NULL;
}
int main(int argc,char *argv[])
{
char a[128] = "abcdefdaawe";
char b[128] = "def";
printf("%s\n",a);
printf("%s\n",search(a,strlen(a),b,strlen(b)));
printf("%s\n",strstr(a,b));
return 0;
}
#include<stdio.h>
int substr(const char *str,const char *p)
{
int i = 0,j = 0;
while(str[i] != '\0'&& p[j] != '\0')
{
if(str[i] == p[j])
{
i++;
j++;
}
else
{
i = i - j + 1;
j = 0;
}
}
if(p[j] == '\0')
return i - j;
else
return -1;
}
int main(int argc,char *argv[])
{
char str[128] = "abcdefdaawe";
char p[128] = "def";
printf("%d\n",substr(str,p));
return 0;
}