繁体   English   中英

C-三元运算符

[英]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]而不是stri API的这种更改将使代码更易于阅读,执行速度更快且使用更安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM