我已经创建了strstr()函数,但程序没有给出任何输出,只是一个空白的屏幕.请看一下代码.
#include<stdio.h>
#include<conio.h>
const char* mystrstr(const char *str1, const char *str2);
int main()
{
const char *str1="chal bhai nikal";
const char *str2="nikal",*result;
result=mystrstr(str1,str2);
printf("found at %d location",(int*)*result);
getch();
return 0;
}
const char * mystrstr(const char *s1, const char *s2)
{
int i,j,k,len2,count=0;
char *p;
for(len2=0;*s2!='\0';len2++);//len2 becomes the length of s2
for(i=0,count=0;*s1!='\0';i++)
{
if(*(s1+i)==*s2)
{
for(j=i,k=0;*s2!='\0';j++,k++)
{
if(*(s1+j)==*(s2+i))
count++;
if(count==len2)
{
p=(char*)malloc(sizeof(char*));
*p='i';
return p;
}
}
}
}
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
这条评论的界限:
//len2 becomes the length of s2
Run Code Online (Sandbox Code Playgroud)
被打破.你反复检查第一个字符s2.而不是*s2,尝试s2[len2].
编辑:正如其他人所说,这个实现显然有很多问题.如果你想要天真的暴力strstr算法,这里有一个简洁快速的版本:
char *naive_strstr(const char *h, const char *n)
{
size_t i;
for (i=0; n[i] && h[i]; i++)
for (; n[i] != h[i]; h++) i=0;
return n[i] ? 0 : (char *)h;
}
Run Code Online (Sandbox Code Playgroud)