重写strstr函数,返回值是首次出现满足字串的地址。
代码相当冗余,感谢各路打手展示自己的代码,让小生学习学习!
#include <stdlib.h>
main()
{
printf("%d\n",mystrstr("aaabbbc","bc"));
return;
}
int mystrstr(char *string,char *sub_str)
{
int start=0,count=0,len=0;
char *tmp;
char *tmp2;
while(*string != '\0')
{
if(*string==*sub_str)
{
memset(&tmp,0x00,sizeof(tmp));
memset(&tmp2,0x00,sizeof(tmp2));
tmp=string;
tmp2=sub_str;
start=count;
len=0;
while(*tmp2 != '\0')
{
if(*tmp2==*tmp)
len++;
tmp2++;
tmp++;
}
if(len==(int)strlen(sub_str))
return start;
}
count++;
string++;
}
return -1;
}
july大神的代码是这样的:
//在字符串中查找指定字符串的第一次出现,不能找到则返回-1
int strstr(char *string, char *substring)
{
if (string == NULL || substring == NULL)
return -1;
int lenstr = strlen(string);
int lensub = strlen(substring);
if (lenstr < lensub)
return -1;
int len = lenstr - lensub;
for (int i = 0; i <= len; i++) //复杂度为O(m*n)
{
for (int j = 0; j < lensub; j++)
{
if (string[i+j] != substring[j])
break;
}
if (j == lensub)
return i + 1;
}
return -1;
}