这个三元表达式的等效if语句是什么?

时间:2013-03-01 23:40:52

标签: c++ if-statement conditional-statements ternary

bool wm(const char *s, const char *t)
{
    return *t-'*' ? *s ? (*t=='?') | (toupper(*s)==toupper(*t)) && wm(s+1,t+1) : !*t : wm(s,t+1) || *s && wm(s+1,t);
}

我在互联网上搜索三元/ if else等价物,但这个似乎很奇怪,因为它在开头有回报。

来自cplusplus网站:     (条件)? (if_true):( if_false)

if(a > b){
    largest = a;
} else if(b > a){
    largest = b;
} else /* a == b */{
    std::cout << "Uh oh, they're the same!\n";
}

谢谢

3 个答案:

答案 0 :(得分:0)

实际上是两个三元语句。

if (*t-'*' ) {
  if (*s) {
    return (*t=='?') | (toupper(*s)==toupper(*t)) && wm(s+1,t+1);
  } else {
    return !*t;
  }
} else {
  return wm(s,t+1) || *s && wm(s+1,t);
}

答案 1 :(得分:0)

开头的返回只返回整个语句的结果。

在您的情况下,您可以将其写为:

bool wm(const char *s, const char *t)
{
    if(*t-'*')
    {
        if (*s)
           return (*t=='?') | (toupper(*s)==toupper(*t)) && wm(s+1,t+1);
        else
           return !*t;
    }
    else
        return wm(s,t+1) || *s && wm(s+1,t);
}

答案 2 :(得分:0)

return不是三元表达式的一部分。你可以这样想:

return (
  *t-'*' ? *s ? (*t=='?') | (toupper(*s)==toupper(*t)) && wm(s+1,t+1) : !*t : wm(s,t+1) || *s && wm(s+1,t)
);

要将其复制为if语句,您需要在单独的分支中放置return语句:

if (*t-'*') {
  if (*s) {
    return (*t=='?') | (toupper(*s)==toupper(*t)) && wm(s+1,t+1);
  } else {
    return !*t;
  }
} else {
  return wm(s,t+1) || *s && wm(s+1,t);
}