[英]C - Ternary operator
为什么在执行此操作时:
int ft_is_alpha(char *str, int i)
{
return (((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')) ? 0 : 1);
}
它崩溃了,但是,当我这样做时:
int ft_is_alpha(char *str, int i)
{
if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
{
return (1);
}
return (0);
}
它不会崩溃..
我这样调用函数
for (i = 0; str[i] != '\0'; ++i)
{
if (ft_is_equal_to(str, i))
{
++count;
int j;
j = i - 1;
while (str[++j] != '\0' && ft_is_alpha(str, j))
{
++length;
}
}
}
我不知道崩溃的含义,第一个函数正确实现了测试,但返回了正确值的反面。 三元运算符的分支应该与if (cond) {} else {}
语句中的顺序相同。 它应显示为:
int ft_is_alpha(char *str, int i) {
return (((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')) ? 1 : 0);
}
由于条件已经评估为布尔值,因此可以通过删除不需要的三元运算符和一些括号来简化代码:
int ft_is_alpha(const char *str, int i) {
return (str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z');
}
可以删除最后一组括号,但可读性较低。
请注意,应将str
声明为const char *
因为该字符串不会被函数修改。 还删除括号中的return (1);
,则不需要它们并认为它们是不良样式。
此外,为什么不分别传递str[i]
而不是str
和i
? API的这种更改将使代码更易于阅读,执行速度更快且使用更安全。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.