计算器实现最终效果

本文介绍了使用C++实现计算器的最终界面和错误处理机制,包括错误输入提示如括号不匹配、输入成分缺失或非法的情况,并详细阐述了中缀表达式转后缀表达式的运算步骤及符号栈的代码实现。
摘要由CSDN通过智能技术生成

一、最后界面展示

二、对错误输入的提示

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值