题目描述:函数原型:char *Strstr(char *pTarget, const char *pPattern),判断pPattern是否是pTarget的一个子串,如果是,返回第一个匹配点的指针,否则返回空。
异常处理:若参数中有指针为NULL,返回NULL。如果pPattern是空串,返回整个pTarget。
核心代码如下:
#include<stdio.h>
/实现strstr函数
char *Strstr(char *pTarget, const char *pPattern)
{
if(pTarget == NULL || pPattern == NULL || *pTarget == '\0')
{
return NULL;
}
if(*pPattern == '\0')
{
return pTarget;
}
char *pTargetBegin = pTarget;//记录pTarget回退的位置
const char *pPatternBegin = pPattern;//记录pPattern回退的位置
while(*pTarget != '\0')
{
if(*pTarget == *pPattern)
{
pTargetBegin = pTarget;//遇到第一个相等的,记录指针位置
while(*pTarget != '\0' && *pPattern != '\0')
{
if(*(pTarget++) != *(pPattern++))
{
pTargetBegin = pTarget;//遇到第一个不相等的,就回退
pPattern = pPatternBegin;
break;
}
}
if(*pPattern == '\0')//若匹配完成,则返回
{
return pTargetBegin;
}
if(*pTarget == '\0')//若没有可以匹配的,返回NULL
{
return NULL;
}
}
else
{
++pTarget;
}
}
return NULL;
}
下面给出main函数的调用:
int main()
{
const int N = 50;
char str1[N];
char str2[N];
char *ans = NULL;
while(scanf("%s %s", str1, str2) != EOF)
{
ans = Strstr(str1, str2);
if(ans)
{
printf("%s\n", ans);
}
else
{
printf("\n");
}
}
return 0;
}