写一个函数,实现strstr,即从一个字符串中,查找另一个字符串的位置,如:strstr("12345","34")返回值为2,在2号位置找到字符串34。代码如下:
#include <stdio.h>
#include <assert.h>
const char *strstr(const char * src,const char * sub)
{
const char * bp ;
const char * sp ;
if(src == NULL || NULL == sub) //判断src与sub的有效性
{
return src ;
}
while(*src) //遍历src字符串
{
bp = src ; //用于src的遍历
sp = sub ; //用于sub的遍历
do //遍历sub字符串
{
if(!*sp) //如果到了sub字符串结束符位置
{
return src ; //表示找到了sub字符串,退出
}
} while (*bp++ == *sp++);
src += 1 ;
}
return NULL ;
}
int main()
{
char p[] = "12345" ;
char q[] = "34" ;
char *r = strstr(p,q) ;
printf("r: %s\n",r) ;
return 0 ;
}
main()函数中的测试结果为:
r:345
可以看出,第35行调用strstr结束之后,r指向了数组p的第三个元素。这里strstr函数的方法是循环取src的子串与sub比较。以本题中的“12345”和“34”为例,比较步骤如下:
(1)“12345”和“34”比较,不满足匹配
(2)“2345”和“34”比较,不满足匹配
(3)“345”和“34”比较,满足匹配