Что было бы эквивалентным, если бы еще утверждение этого троичного выражения?

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

Благодарю вас

-3

Решение

это два троичные заявления на самом деле.

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);
}
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);
}
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);
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector