C ++ MuParser解析不按预期运行

时间:2016-12-24 04:38:53

标签: c++ muparser

我刚刚开始玩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();

谢谢!

2 个答案:

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