请用C语言编写一个高效率的函数来从字符串中找到子串的位置,并且返回其下标;
注:参数中的字符串都以\0结束(不允许使用C/C++内置的字符串查找函数)
/***************************************************************
File Name: my_strstr.c
Author: 浮生流年
Function List: main() 主函数
Created Time: 2018年02月09日 星期五 14时25分05秒
**************************************************************/
#include <stdio.h>
int findString(const char str[], const char sub[])
{
const char *p, *q;
int i = 0;
if (NULL == str || NULL == sub)//判断str和sub的有效性
return -1;
while (*str)//遍历str字符串
{
p = str;
q = sub;
while (*p++ == *q++)//遍历sub字符串
{
if (*q == '\0')//如果到了sub字符串结束符位置
return i; //表示找到了sub字符串,退出
}
i++;
str += 1;
}
return -1;
}
int main()
{
char a[] = "hello world";
char b[] = "ld";
int i;
i = findString(a, b);
if (i == -1)
printf("没有子串\n");
else
printf("第一个子串的下标是 %d\n", i);
return 0;
}