黑马程序员技术交流社区
标题:
关于数组遍历 return返回值得问题?
[打印本页]
作者:
远人
时间:
2014-3-27 15:50
标题:
关于数组遍历 return返回值得问题?
本帖最后由 远人 于 2014-4-4 13:15 编辑
老师练习题:编写一个函数char_contains(char str[],char c),如果字符串str中包含字符c则返回值1,否则返回数值0。
这是第四种方法,也是最难的一种,如下程序
#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';
}
return 0;
}
复制代码
我想问,这里的
{
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
修改成下面的代码才是你想要的:
int char_contains(char str[],char c)
{
int i = -1;
while (str[++i] != c && str[i] != '\0');
return str[i] != '\0';
}
复制代码
作者:
沙洲冷
时间:
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