黑马程序员技术交流社区

标题: 关于数组遍历 return返回值得问题? [打印本页]

作者: 远人    时间: 2014-3-27 15:50
标题: 关于数组遍历 return返回值得问题?
本帖最后由 远人 于 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;  }?

作者: 周宇华    时间: 2014-3-27 16:39
本帖最后由 周宇华 于 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. }
复制代码




作者: 沙洲冷    时间: 2014-3-27 16:44
楼主代码有问题,应该这样写:
#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。


作者: agelessman    时间: 2014-3-27 17:44
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
作者: 远人    时间: 2014-3-27 19:06
周宇华 发表于 2014-3-27 16:39
你确定代码是这样的?
while (str[++i] != c && str != '\0')
    {

恩,懂了,代码错了,难怪看着代码理解不了,原来这样!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2