6-4 设计函数 locatesubstr
设计函数 char *locatesubstr(char *str1,char *str2),查找str2指向的字符串在str1指向的字符串中首次出现的位置,返回指向该位置的指针。若str2指向的字符串不包含在str1指向的字符串中,则返回空指针NULL。 注意这里必须使用指针而不是数组下标来访问字符串。
函数接口定义:
函数接口如下:
char *locatesubstr(char *str1,char *str2);
在这里解释接口参数。例如:其中 str1
和 str2
都是用户传入的参数,其含义如题面所述 。若查找成功则返回指向该位置的指针,若失败则返回空指针。
裁判测试程序样例:
函数被调用进行测试的例子如下:
#include <stdio.h>
char *locatesubstr(char *str1,char *str2);
int main()
{
char str1[505],str2[505];
char *p;
gets(str1);
gets(str2);
p=locatesubstr(str1,str2);
if(p==NULL) printf("NULL!\n");
else puts(p);
return 0;
}
/* 请在这里填写答案 */
输入样例:
didjfsd dabcxxxxxx
abc
输出样例:
abcxxxxxx
以下是我自己做的答案
char *locatesubstr(char *str1,char *str2)
{
int i=0,j=0,c=0,h;
while(*(str1+i))
{
if(*(str1+i)==*(str2+j))
{h=i;i++;j++;
for(;*(str1+i)==*(str2+j);i++,j++)
if(*(str2+j))
c=1;
break;
}
else i++;
if(c==1)
return (str1+h);
else
return (NULL);
}
发现少了一个括号,加上还是过不了:
char *locatesubstr(char *str1,char *str2)
{
int i=0,j=0,c=0,h;
while(*(str1+i))
{
if(*(str1+i)==*(str2+j))
{h=i;i++;j++;
for(;*(str1+i)==*(str2+j);i++,j++)
if(*(str2+j))
c=1;
break;
}
else i++;
}
if(c==1)
return (str1+h);
else
return NULL;
}