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";
}
谢谢
答案 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);
}