A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

int char_contains(char str[],char c)
{
        int i = -1;
        while(str[++i] != c && str[++i] != '\0');

        return str[i] == c ? 0 : 1; //也可以是:return str[i] != '\0'
}

为什么 return str[i] != '\0';也可以呢?实在是不明白啊

6 个回复

倒序浏览
“return str[i] == c ? 0 : 1;”这里没写反吗= =包含c返回0,不包含返回1吗。。
退出while有两种:
(1)str[i] == c;
如果(1)情况成立,那么str[i] != '\0',从而return str[i] != '\0'这条语句条件判断成立,值为1,return 1,包含字符返回1。
(2)str[i] == '\0'
如果(2)成立,那么说明直到遍历整个字符串完毕也没找到包含的字符c,return str[i] != '\0'中条件判断因为str[i] == '\0'而为假,值为0,return 0,不包含字符返回0。
回复 使用道具 举报
如果这个函数的作用是判断str数组中是否含有c字符的话,应该是有问题的。两个++i有问题。我觉得应该是这样:
  1. nt char_contains(char str[],char c)
  2. {
  3.         int i = -1;
  4.         while(str[++i] != c && str[i] != '\0');

  5.         return str[i] == c ? 0 : 1; //也可以是:return str[i] != '\0'
  6. }i
复制代码


而楼主的问题,return str != '\0';如果str等于'\0'的话,意味着遍历到最后一位字符也没有找到字符c,所以是等效的。
回复 使用道具 举报
加油 加油
回复 使用道具 举报
从今以后 发表于 2014-12-16 15:48
“return str == c ? 0 : 1;”这里没写反吗= =包含c返回0,不包含返回1吗。。
退出while有两种:
(1)str == ...

恩,我觉得你这是正解……{:3_53:}
回复 使用道具 举报
从今以后 发表于 2014-12-16 15:48
“return str == c ? 0 : 1;”这里没写反吗= =包含c返回0,不包含返回1吗。。
退出while有两种:
(1)str == ...

不好意思啊,我写反了:L,你的解释太好了,我终于转过弯过来了,非常谢谢
回复 使用道具 举报
sajiner2 发表于 2014-12-16 15:56
如果这个函数的作用是判断str数组中是否含有c字符的话,应该是有问题的。两个++i有问题。我觉得应该是这样 ...

额 不好意思,我又写错了,这加了两次了,汗哪
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马