-3
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";
}

谢谢你

4

3 回答 3

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);
}
于 2013-03-01T23:43:43.297 回答
0

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

在你的情况下,你可以这样写:

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);
}
于 2013-03-01T23:44:14.847 回答
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);
}
于 2013-03-01T23:44:43.670 回答