传入两个地址,第一个是母串首地址,第二个是子串首地址,判断是否是子串,如果不是,返回NULL,如果是,返回母串中第一次出现子串的首地址。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
char* my_strstr(const char* arr1, const char* arr2)
{
assert(arr1 && arr2);
char* s1 = NULL;
char* s2 = NULL;
char* cp = arr1;
if ((*arr1 == '\0') || (*arr2 == '\0'))
{
return NULL;
}
while (*cp) //遇到'/0'停止
{
s1 = cp;
s2 = arr2;
while ((*s1 == *s2) && *s1) //相同继续走
{
s1++;
s2++;
}
if (*s2 == '\0') //如果子串走完了(遇到'\0'),就是找到了。
{
return cp;
}
cp++;
}
return NULL; //没找到
}
int main()
{
char arr1[20] = { "abcccccddefff" }; //测试用例
char arr2[5] = { "ccd" }; //同上
char arr3[5] = { "dee" }; //同上
char* ret = my_strstr(arr1, arr2);
if (ret == NULL)
{
printf("不匹配\n");
}
else
{
printf("%s\n", ret);
}
ret = my_strstr(arr1, arr3);
if (ret == NULL)
{
printf("不匹配\n");
}
else
{
printf("%s\n", ret);
}
system("pause");
return 0;
}