Qt学习3 | 您所在的位置:网站首页 › 计算器编程教程 › Qt学习3 |
计算器中的“=”按钮这部分的代码解释
目录 制作计算器中的“=”按钮这部分的代码解释 一、代码部分 二、解释 三、思路 四、死循环! 一、代码部分 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 实验室设备网 版权所有 |