任务描述
在C语言中<string.h>头文件内,实现了strstr()函数,其函数原型为:
extern char *strstr(char *str1, const char *str2);
它的作用是:若str2是str1的子串,则返回str2在str1的首次出现的地址;如果str2不是str1的子串,则返回NULL。
下面,请你设计算法简单实现函数strstr(),若存在返回子串首次出现的下标(从0开始),若不存在返回-1。
编程要求
输入
多组数据,每组数据有一行,分别为字符串str1、str2(用空格分开),当两串都为”0”时输入结束。
输出
对于每组数据分别输出一行,若子串存在返回子串首次出现的下标(从0开始),若不存在返回-1;
测试说明
平台会对你编写的代码进行测试:
测试输入:
bjfuacm bjfu
datastructure hello
aaaaaaaaaaab ab
0 0
预期输出:
0
-1
10
公主王子们请看代码:
int strstr(string s1,string s2)
{//查找子串第一次出现的位置
/**************begin************/
int i=0,j=0;
while(s1[i]!='\0'&&s2[j]!='\0')
{
if(s1[i]==s2[j])
{
i++;
j++;//
}
else
{
i=i-j+1;//返回到原来位置的下一个位置
j=0;//子串返回到第一个位置
}
}
if(j>=s2.length())
return i-s2.length();
else
return -1;
/**************end************/
}
这道题目我使用的是非常朴素的BF算法,i代表主串的位置,j代表子串的位置,然后从头开始一个一个的比较,如果相同,则i和j都后移一个位置继续比较下一个元素;如果不同时,i返回到原来位置的下一个位置,j返回到第一个位置,又开始重新一轮的比较。时间复杂度虽然高一点,但是比较好理解😋😋😋。