Я только начал играть с MuParser — кажется, действительно классная библиотека! Однако я застрял при разборе следующего выражения. Кто-нибудь может увидеть из фрагмента кода ниже, где я иду не так? Каким бы ни был ‘count’, результат всегда равен 0 ??
mu::Parser parser;
string rule = "(n%10==1&&n%100!=11?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2)";
parser.DefineConst("n", count);
parser.SetExpr(rule);
int retVal = parser.Eval();
Спасибо!
Итак, я думаю, что ваш код неверен.
это падает во время выполнения.
Вы можете поместить свой код в try {} catch {}, чтобы найти вашу проблему.
например :
try
{
mu::Parser parser;
string rule = "(n%10==1&&n%100!=11?0:n%10>=2&&n%10<=4&&(n%100<10||n%100>=20)?1:2)";
parser.DefineConst("n", count);
parser.SetExpr(rule);
int retVal = parser.Eval();
std::cout << retVal << std::endl;
}
catch (Parser::exception_type &e)
{
std::cout << e.GetMsg() << std::endl;
}
Для всех, кто заинтересован. Я добавил оператор по модулю, добавив следующее:
parser.DefineOprtChars("%");
parser.DefineOprt("%", moduloOperator, mu::prINFIX);
double moduloOperator(double v, double w) {
return (int)v % MAX(1, (int)w);
};