我刚刚开始玩MuParser - 看起来像一个非常酷的图书馆!但是,我坚持解析以下表达式。任何人都可以从下面的代码片段中看到我出错了吗?无论什么'计算'结果似乎总是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();
谢谢!
答案 0 :(得分:1)
对任何有兴趣的人。我通过添加以下内容添加了模运算符:
parser.DefineOprtChars("%");
parser.DefineOprt("%", moduloOperator, mu::prINFIX);
double moduloOperator(double v, double w) {
return (int)v % MAX(1, (int)w);
};
答案 1 :(得分:0)
所以,我认为你的代码是错误的。 它在运行时下降。 您可以将代码放入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;
}