Qt学习3 您所在的位置:网站首页 计算器编程教程 Qt学习3

Qt学习3

2023-03-10 13:39| 来源: 网络整理| 查看: 265

计算器中的“=”按钮这部分的代码解释

目录

制作计算器中的“=”按钮这部分的代码解释

一、代码部分

二、解释

三、思路

四、死循环!

一、代码部分

void Widget::on_equalButton_clicked() {QStack s_num,s_opt; //声明两个int类型变量char opt[128]={0};//char型数组int i = 0,tmp = 0,num1,num2;//声明变量i,tmp,num1,num2//把QString 转换成 char*QByteArray ba;//字节数组ba.append(expression);//把QString转换成QByteArraystrcpy(opt,ba.data());//data可以把QByteArray转换成char *while(opt[i]!='\0'||s_opt.empty()!=true)//在字符串中'\0'用作字符串的结束标志,字符串没结束且不为空的情况下{if(opt[i]>='0'&&opt[i] Priority(s_opt.top()) ||(s_opt.top() == '(' && opt[i] != ')')){s_opt.push(opt[i]);i++;continue;}if(s_opt.top() == '(' && opt[i] == ')'){s_opt.pop();i++;continue;}if (Priority(opt[i]) mainLineEdit->setText(QString::number(s_num.top())); //QString中有个静态成员函数number(),可以把数字转换成字符串。expression.clear(); } int Widget::Priority(char ch) {switch (ch){case '(':return 3;case '*':case '/':return 2;case '+':case '-':return 1;default:return 0;} }

pop()删除栈顶元素

top() 是取出栈顶元素,不会删掉栈里边的元素

二、解释

这里有个优先级函数不好理解

三个并列的条件语句:

条件1:if(s_opt.empty() == true || Priority(opt[i]) > Priority(s_opt.top()) ||                                                  (s_opt.top() == '(' && opt[i] != ')'))

//如果操作符s_opt是空,或者当前操作符的优先级Priority大于栈顶的优先级,或者栈顶的操作符   是‘(’ 不是 ')'           然后把操作符入栈

条件2:if(s_opt.top() == '(' && opt[i] == ')')

//如果操作符是 ‘(’  不是 ')'            直接操作符删除

条件3:if (Priority(opt[i])



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有