7.编写一个函数string_in(),它接受两个字符串指针参数。如果第二个字符串被包含在第一个字符串中,函数就返回被包含的字符开始的地址。例如,string_in("hats","at")返回hats中a的地址,则,函数返回空指针。在一个使用循环语句为这个函数提供输入的完整程序中进行测试。
char string_in(char *p1,char *p2){
int m = 0;
int i;
char *p3 = p2;
char *p4;
while(*p1 != *p2)
++p1;
p4 = p1;
while(*p3 != '\0'){
p3++;
m++;
}
for(i = 0;i < m;i++){
if(++p1 != *++p2)
return NULL;
}
return p4;
}
正确答案:
char string_in(char *p1,char *p2)
{
char *p1_save = p1, *p2_save = p2;
if(*p1 == '\0' || *p2 == '\0') return NULL;
while(1)
{
if(*p1 == *p2)
{
if(++p2 == '\0') return p1_save;
if(*++p1 == '\0') return NULL;
}
else
{
if(*++p1 == '\0') return NULL;
p1_save = p1;
p2 = p2_save;
}
}
}
我感觉有点想不到?还有其他方法吗?