实现 strStr() 函数。
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。
函数库里的strstr函数用于判断字符串一是否是字符串二的子串,所以实现方法就是找相同。这里注意的是不能直接用原来的字符串遍历会导致位置丢失。比如bcc和abcbccd,在第一个b发现相同就去++遍历到第三个时发现错误,此时你已经丢失了字符串的位置,不建议修改原参数。所以我用了s1和s2代替进行遍历操作,并用cur记录s1进入遍历的位置,当发现错误返回时可以返回到cur+1。
int strStr(char * haystack, char * needle){
char*s1=NULL;
char*s2=NULL;
char*cur=haystack;
int count=0;
if(*haystack=='\0')
return -1;
while(*cur) //结束标志是haystack都找完了
{
s1=cur;
s2=needle;
while(*s1 &&*s2 && (*s1==*s2)) //判断是否相同 进入遍历
{
s1++;
s2++;
}
if(*s2=='\0') //判断能找到子串的标志是s2都遍历完
{
return count;
}
cur++;
count++;
}
return -1;
}