实现 strStr() 函数。
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
示例 1:
输入: haystack = “hello”, needle = “ll”
输出: 2
示例 2:
输入: haystack = “aaaaa”, needle = “bba”
输出: -1
说明:
当 needle 是空字符串时,我们应当返回什么值呢,对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 定义相符.
——————————————————————————————————
拿到这道题,如果不懂strstr的实现原理,笔者介意同学们先搞清楚函数的原理,之前笔者写过一篇模拟实现字符串库函数的文章有兴趣的童鞋可以看看。这里实现的strstr唯一与与库函数不同就是他返回的是数字,而库函数返回字符开始位置的字符串。代码奉上
int strStr(char* haystack, char* needle)
{
if((needle == NULL ) || strlen(needle) == 0) return 0;//这里笔者仅仅判断是不是空指针无法通过
//,必须接着判断字符串的长度是不是为零
char* tmp = haystack;
char* s1 = haystack;
char* s2 = needle;
char* ptr = haystack;
while(*ptr)
{
s1 = ptr;
s2 = needle;
while(*s1 && *s2 && *s1 == *s2)
{
s1++;
s2++;
}
if(*s2 == '\0')
{
return s1 - tmp - strlen(needle);//这里的偏移位置在减去needle的长度就是正确答案,感觉怪怪的
}
ptr++;
}
return -1;
}