关于“str[i] != 0”问题

一,原题

题型概述:遍历一个字符数组,符合for循环条件的进行内层if语句一旦字符串中有’‘a’ - ‘z’ n就自增一。

问:最后运行结果n的结果?

该为选择题,对于我来说有争议的两个答案 A.0 B.2
我选择了A,答案为B。
#include <stdio.h>
int main()
{
  char s[] ={"012xy"};
  int n = 0;
  for(int i = 0;s[i]!=0,i++){
    if(s[i]>='a'&&s[i]<'z')n++;
 }
 printf("%d",n);
 return 0;
}

二,分析

	1,该问题的关键点在于for循环中的 "s[i] != 0;"
	2,"s[i] != 0;"的初步理解为 当字符数组s中的元素不为0时执行for循环,否则循环结束
	3,而这其中的0为讨论的关键点
	4,
	   一,为字符'0'
	   二,为字符串结束标志'\0'
	   三,为布尔值的假值 0

三,讨论

由于for(表达式1;表达式2;表达式3)中的"表达式2"为布尔判断的一种,即"表达式2"为真执行循环,为假结束循环,并且“==”与“!=”相对而言,因此可以借助修改过的if语句的基础上语句来探讨

简化代码

char s[] = {"012xy"};
if(s[i] == 0){ //i指占位符,无意义,讨论时填值
 prinf("程序执行!");
}

1,假设此0为字符’0’
探讨s[0]的值’0’ == 0是否成立

char s[] = {"012xy"};
if(s[0] == 0){
 prinf("程序执行!");
}

结果:该假设不成立

2,假设此0为结束字符串’\0’
探讨s[5]的值’\0’ == 0是否成立

char s[] = {"012xy"};
if(s[5] == 0){
 prinf("程序执行!");
}

结果:该假设成立

3,假设此0为布尔值的假值0
探讨s[5]的值无字符串为布尔假值 == 0是否成立
这个比较绕弯,所以我们先理顺思路:

1,if( 表达式 ){} 语句是通过表达式的布尔值来决定分支,这里是通过	关系运算符表达式来决定布尔值,此运算符为双目运算符,
即操作符需要两个值来运算。
2,即 == 运算符两边是通过值是否相等而判断真假,而非通过布尔值的是否相等而判断真假,
比如 表达式1为真 == 表达式2为真 ---> 运算结果为真,像通过布尔值来判断布尔值,不过&&、|| 可以如此。

结果:通过上述讨论,该结论为假

四,总结

关于s[i] != 0的讨论,结果为:此处的 0 等同于结束标志’\0’
  • 12
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值