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);
}
Я искал в интернете троичные / если еще эквиваленты, но этот кажется странным, потому что он имеет отдачу в начале.
с сайта 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";
}
Благодарю вас
это два троичные заявления на самом деле.
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);
}
Возвращение в начале просто возвращает результат всего оператора.
В вашем случае вы могли бы написать это как:
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);
}
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);
}