strstr()函数:
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
思路:
1.遍历整个长串,然后找到与短串相同的位置,并且记录这个位置
2.与短串依次次比较,若在后面某个位置不相同了,这时候,将刚在记录的长串的位置后移一位继续比较;若一直都相同,则返回刚才记录的位置
3.如果长串遍历都没找到,则返回NULL
当我第一次开始做出这个函数的时候(当然存在一些问题)
代码如下:
#include<stdio.h>
#include<windows.h>
char* My_strstr(char arr[], char src[])
{
int i = 0;
int j = 0;
int tmp = 0;
char* start = NULL;
while ( (arr[i] != '\0') &&(src[j] != '\0'))
{
start = &arr[i]; //标记开始比较的位置
while (arr[i] == src[j])
{
i++;
j++;
}
if (src[j] == '\0')
{
return start;
}
i=i+1;
j=0;
}
return NULL;
}
int main()
{
char arr[] = "abbbcdef";
char src[] = "bcd";
char* ret = My_strstr(arr, src);
if (ret == NULL)
{
printf("not exist!");
}
else
{
printf("%s\n", ret);
}
system("pause");
return 0;
}
2.还有函数的安全性不够严格
3.整体看起来,不能拉高水平
修改之后的函数:
const char* My_strstr(const char* arr,const char* src)
{
const char * str1 = arr;
const char * str2 = src;
const char * start=NULL ;
assert(arr);
assert(src);
if (*str2=='\0')
{
return str1;
}
while (*str1)
{
start = str1;
while ((*str1 ) && (*str2 ) && (*str1 == *str2))
{
str1++;
str2++;
}
if (*str2 == '\0')
{
return start;
}
str1 = start + 1;
str2 = src;
}
return NULL;
}