一、最后界面展示
二、对错误输入的提示
1.如果左右括号数量不匹配,则会跳出弹窗警告用户,实现代码如下:
/*判断括号数量是否匹配*/
void MainWindow::btnequClicked(){
if(brkflag){
QMessageBox::information(this, tr("ERROR!"),
tr("Parentheses not matching!"));
return;
}
实际效果如下:
2.若输入成分有缺失,则会跳出弹窗警告,实现代码与上文类似:
/*判断成分是否缺失*/
if((s2.right(1)<'0'||s2.right(1)>'9')&&s2.right(1)!=')'){
QMessageBox::information(this, tr("ERROR!"),
tr("Missing operational component!"));
return;
}
实际效果如下:
3.若输入成分非法,则自动屏蔽用户输入。(若输入90.之后准备输入运算符,则程序自动屏蔽用户输入)
三、中缀转后缀的运算步骤
/* 中缀转后缀 src带入中缀式,des带出后缀式 */
void MainWindow::InfixToSuffix(char* src, char* des)
{
std::map<char, int> priority;
priority['+'] = 0;
priority['-'] = 0;
priority['*'] = 1;
priority['/'] = 1;
priority['^'] = 2;
priority['s'] = 3;
priority['c'] = 3;
priority['t'] = 3;
priority['n'] = 3;//ln
priority['g'] = 3; //lg
priority['e'] = 3;//exp
priority['q'] = 3; //sqrt
des[0]='0';
des[1]=' ';
int k = 2;
/* 符号栈 */
QStack<char> symbol;
int i = 0;
while (src[i] != '\0')
{
if (src[i] == ' ') //如果当前字符是空格,则往后走一个
{
i++;
continue;
}
else if (src[i] >= '0' && src[i] <= '9' || src[i] == '.')
{
des[k++] = src[i];
if ((src[i + 1] < '0' || src[i + 1]>'9') && src[i + 1] != '.') //数字后加空格
{
des[k++] = ' ';
}
}
el