实现找子串查找函数(strstr)的问题

HHL977901877 2016-03-13 06:29:06
实现找子串查找函数(strstr):不能使用字符串比较 如检查wangyang 是否有 ang
const char* StrStr(const char *str1, const char *str2){
while(*str1 != '\0'){
const char *p = str1;
const char *q = str2;
const char *res = NULL;
if(*p == *q)
{
res = p;
while(*p && *q && *p++ == *q++);
if(*q == '\0')
return res;
}
str1++;
}
return NULL;
}
int main(){
const char *str1 = "wangyang";
const char *str2 = "ang";
const char *res = StrStr(str1, str2);
if(res != NULL)
printf("res=%p\n",res);
else
printf("not find\n");
}


问题1: while(*p && *q && *p++ == *q++); while当中传*p和*q什么意思,while当中传的不是条件吗,怎么可以直接传一个指针呢?
问题2:程序函数StrStr当中返回值为空,在main函数中的StrStr为什么有返回值为res?
问题3:顺便给我解释下这个程序是如何实现了这个函数的,有点不太明白?
望热心人士能够帮忙解决!!!


...全文
361 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxianbin 2016-03-16
  • 打赏
  • 举报
回复
1. *p和*q 不是指针,用于判断字符串有没有结束
轮子学长 2016-03-16
  • 打赏
  • 举报
回复
Q1: p和q是指针, *p和*q分别指向str1 和 str2字符串里的某个字符 Q2:StrStr函数的返回值是str1中第一次出现str2的子字符串的首地址,如果str1不存在子字符串str2返回NULL,如果存在,返回res
                if(*q == '\0')  
                    return res;     
Q3:看下str1、str2 以及p和q的值的变化,就明白了。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧