QString QCalculatorDec::calculate(QString l, QString op, QString r)
{
QString ret = "Error";
if(isNumber(l) && isNumber(r))
{
double lp = l.toDouble();
double rp = r.toDouble();
if(op == "+")
{
ret.sprintf("%f", lp + rp);
}
else if(op == "-")
{
ret.sprintf("%f", lp - rp);
}
else if(op == "*")
{
ret.sprintf("%f", lp * rp);
}
else if(op == "/")
{
double delta = 0.000000000001;
if(-delta < rp && rp < delta)
{
ret = "Error";
}
else
{
ret.sprintf("%f", lp / rp);
}
}
else
{
ret = "Error";
}
}
return ret;
}
QString QCalculatorDec::calculate(QQueue<QString>& exp)
{
QString ret = "Error";
QStack<QString> stack;
stack.clear();
while(!exp.isEmpty())
{
QString str = exp.dequeue();
if(isNumber(str))
{
stack.push(str);
}
else if(isOperator(str))
{
QString rp = !stack.isEmpty() ? stack.pop() : "";
QString lp = !stack.isEmpty() ? stack.pop() : "";
QString result = calculate(lp, str, rp);
if(result != "Error")
{
stack.push(result);
}
else
{
break;
}
}
}
if(exp.isEmpty() && stack.size() == 1 && isNumber(stack.top()))
{
ret = stack.pop();
}
return ret;
}
Qt 第10课、计算器后缀计算算法
最新推荐文章于 2024-11-04 14:53:01 发布
该代码段展示了两个函数,用于处理基于QString的数学计算。calculate函数执行基础的加减乘除操作,而calculate(QQueue&)函数处理带有操作符的表达式队列,使用栈来求解表达式的值。如果遇到除数为零的情况,函数会返回错误。
摘要由CSDN通过智能技术生成