计算器核心算法:
1、将中缀表达式进行数字和运算符的分离
2、将中缀表达式转换成后缀表达式
3、通过后缀表达式计算最后的结果
二、计算器括号匹配算法
计算器括号匹配算法的意义在于判断你输入的表达式里面的左右括号是否匹配
- 算法的基本思路
1、如果是左括号,直接进栈
2、如果是右括号且栈顶为左括号,栈顶元素 pop()
3、如果是右括号且栈顶不是左括号,报错
运行完栈里面还有东西,直接报错
//括号匹配算法
bool QCalculatorDec::match(QQueue<QString>& exp)
{
bool ret = true;
QStack<QString> stack;
stack.clear();
for(int i = 0; i < exp.length(); i++)
{
if(isLeft(exp[i]))
{
stack.push(exp[i]);
}
else if(isRight(exp[i]))
{
if(!stack.isEmpty() && isLeft(stack.top()))
{
stack.pop();
}
else
{
ret = false;
break;
}
}
}
if(!stack.isEmpty())
{
ret = false;
}
return ret;
}
QCalculatorDec::QCalculatorDec()
{
m_exp = "";
m_result = "";
QQueue<QString> str;
str = split("9 + (-3 - 1) * 5 + 1");
for(int i = 0; i < str.length(); i++)
{
qDebug() << str[i];
}
qDebug() << match(str);
}