C PRIMER PLUS第十一章的第八题,哪位大佬可以看一下我写的程序为什么运行不对吗?谢谢好心人!!

题目:编写一个函数string_in(),它接受两个字符串指针参数,如果第二个字符串被包含在第一个字
符串中,函数就返回被包含的字符串的开始的地址,例如string_in("hats","at")返回hats中a的
地址,否则返回空指针,在一个使用循环的程序进行测试这个函数。
我写的函数是:
char * string_in(char * st1, char * st2)
{
char * pt;
char * pt1;
int i = 0, t = 0;
pt1 = st1;

while (*pt1++ != '\0')
{
pt = pt1;
t = 0;
while (pt[t] == st2[t] && st2[t] != '\0')
{
t++;
if (t >= strlen(st2))
break;
else
pt = NULL;
}
}
return pt;
运行结果是,输入hats,at没找到,hats,ats就找到了,这是为什么?
谢谢大佬。

你的代码中的问题中: while (pt[t] == st2[t] && st2[t] != '\0') 是这个条件的问题,既然你能写出来,自己仔细理解下,应该就看出问题了;
写个参考代码给你:
const char *string_in(const char *str, const char *sub_str){
for (int i = 0; str[i] != '\0'; i++){
int tem = i;
int j = 0;
while (str[i++] == sub_str[j++]){
if (sub_str[j] == '\0'){
return &str[tem];
}
}
i = tem;
}
return NULL;
}追问

谢谢你大佬,你的程序我看明白了,可是我还是搞不懂我写的错在哪里了,大佬可以跟我讲一下吗?我刚学不是很懂,谢谢你。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-13
char * string_in(char * st1, char * st2)
{
char * pt;
char * pt1;
int i = 0, t = 0;
pt1 = st1;

while (*pt1 != '\0')
{
pt = pt1++;
t = 0;
while (pt[t] == st2[t] && st2[t] != '\0')
{
t++;
if (t >= strlen(st2))
break;
}
if(st2[t]=='\0')
{
break;
}
}
if(*pt1=='\0')
{
pt=NULL;
}
return pt;
}