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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 远人 中级黑马   /  2014-3-27 15:50  /  1240 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 远人 于 2014-4-4 13:15 编辑

老师练习题:编写一个函数char_contains(char str[],char c),如果字符串str中包含字符c则返回值1,否则返回数值0。
这是第四种方法,也是最难的一种,如下程序

  1. #include <stdio.h>
  2. #include <string.h>

  3. int char_contains(char str[],char c);

  4. int main(int argc, const char * argv[])
  5. {

  6.     char name[] = "itcase";
  7.     int result = char_contains( name , 'c');
  8.    
  9.     printf("%d\n",result);
  10.     return 0;
  11. }
  12. //方法四

  13. int char_contains(char str[],char c)
  14. {
  15.     int i = -1;
  16.    
  17.     while (str[++i] != c && str[i] != '\0')
  18.     {
  19.         return str[i] != '\0';
  20.     }
  21.     return 0;
  22. }
复制代码


我想问,这里的   
{
        return str != '\0';
}
如何理解,怎么不是返回{  return 1;  }?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 周宇华 于 2014-3-27 16:43 编辑

你确定代码是这样的?
while (str[++i] != c && str != '\0')
    {
        return str != '\0';
    }
这里的while根本起不到循环遍历的作用啊。只要符合条件str[++i] != c && str != '\0',就会执行语句return str != '\0';函数就结束了。
补上:
return str != '\0'; // 如果str != '\0'成立就返回1,反之返回0
修改成下面的代码才是你想要的:
  1. int char_contains(char str[],char c)
  2. {
  3.     int i = -1;
  4.    
  5.     while (str[++i] != c && str[i] != '\0');
  6.     return str[i] != '\0';
  7. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
楼主代码有问题,应该这样写:
#include <stdio.h>
#include <string.h>

int char_contains(char str[],char c);

int main(int argc, const char * argv[])
{

    char name[] = "itcase";
    int result = char_contains( name , 'c');

    printf("%d\n",result);
    return 0;
}
//方法四

int char_contains(char str[],char c)
{
    int i = -1;

    while (str[++i] != c && str[i] != '\0');
    return str[i] != '\0';
}
while循环用来遍历字符串,看字符串中是否包含字符c,如果包含,结束循环,这时函数返回1。
如果到字符串结尾也没有找到字符c,说明字符串中不含有字符c,这时函数返回0。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
int char_contains(char str[],char c)
{
    int i = -1;
   
    while (str[++i] != c && str[i] != '\0');
    return str[i] != '\0';
}
是的,你下边的程序应该改成这样的,while 遍历字符串,括号内是条件,如果找到了c,那么while就结束了,执行下边的return语句,这时候str[i]肯定不等于'\0',所以就是真,返回1,如果while没找到c,肯定最后一个是'\0'
while不能执行,执行下边的return,这时候str[i]就等于'\0'了,那么str[i]!='\0'就是假,返回0

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
周宇华 发表于 2014-3-27 16:39
你确定代码是这样的?
while (str[++i] != c && str != '\0')
    {

恩,懂了,代码错了,难怪看着代码理解不了,原来这样!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马