【程序】[Qt\C++] 图形化计算器——用QT5实现带括号优先级的GUI编程计算器
一、 实验任务(实验题目、目的)
搞个图形化的代括号的计算器
二、 任务分析
- 假设已经有了计算器,实现按下等号的计算算法
- 学习qt
- 设置各按钮槽函数
- 将算法缝合进qt内
- 设计实现负数、小数
- 优化代码计算步骤
- Debug
- 添加计算器图标ico
- 准备发csdn和GitHub
三、 实验设计(实验环境、算法、步骤、核心代码等)
环境:QT5 使用QT CREATOR编程(内置帮助快速查询,很方便)
核心代码如下(等号按钮)
//等号 核心代码 从input框中取出待运算的字符串 运算后输出至output,此处input为待运算的中缀表达式
void MainWindow::on_pushButton_Op_equal_clicked()
{QString input = ui->textEdit_Input->toPlainText();QStack <QChar> op;QStack <QString> postTemp;
// QString p;int numIdxStart=-1;//中缀转为后缀表达式计算for (int i = 0; i < input.length(); ++i) {//数字开始 记录下标if(priority(input[i])==1&&numIdxStart==-1){numIdxStart=i;}else if(priority(input[i])==1){//数字}else {//此处input[i]为运算符//目前为止的是数字 push入后缀栈 此if防止连续运算符出现导致的bugif(numIdxStart!=-1){QString n = input.mid(numIdxStart,i-numIdxStart);postTemp.push(n);}numIdxStart = -1;if(op.isEmpty()){op.push(input[i]);}else if(priority(input[i])==1){op.push(input[i]);}else if(input[i]=='('){op.push(input[i]);}else if(priority(input[i])>=priority(op.top())){op.push(input[i]);}else if(input[i]==')'){//遇到右括号则弹栈中运算符直到遇到左括号while(op.top()!='(')postTemp.push(op.pop());op.pop();}else if(priority(input[i])<priority(op.top())){//若当前运算符优先级小于栈中 则弹 直到运算符高于等于栈中元素//并将当前运算符push入栈while(!op.isEmpty()&&priority(input[i])<=priority(op.top()))postTemp.push(op.pop());op.push(input[i]);}else{printLog("else");}}} //end for//将最后的数字push入栈if(numIdxStart!=-1)postTemp.push(input.mid(numIdxStart));//将op栈里残存的运算符push入栈while(!op.isEmpty()){postTemp.push(op.pop());}QVector<QString> post;while(!postTemp.isEmpty()){// p = postTemp.top() + p;post.append(postTemp.pop());}
// //post为后缀表达式vector(反向) 不是字符串是因为有多位数的运算 字符串仍需分析数字的位数
// //post不带括号 每个元素为一个操作符(数字或运算符)
// printLog("p:"+p);QStack <double> ans;for (int i = post.length()-1; i >= 0; --i) {printLog("for:"+QString::number(i)+" post[i]:"+post[i],1000);if(isDigits(post[i])){ans.push(post[i].toDouble());continue;}double a = ans.pop();double b = ans.pop();double c=66666;if(post[i]=='+'){c = b + a;}else if(post[i]=='-'){c = b - a;}else if(post[i]=='*'){c = b * a;}else if(post[i]=='/'){c = b / a;}else {printLog("shit");}ans.push(c);}
// printLog("sleep",100000);
//将结果输出到output文本框ui->textEdit_Output->setText(QString::number(ans.pop()));
四、 实验结果
左边为我的计算器,右边是win10自带的计算器
完整的代码和项目文件在我github里 可以star下载下来,用qt5打开可以直接跑
https://github.com/gongfpp
【程序】[Qt\C++] 图形化计算器——用QT5实现带括号优先级的GUI编程计算器相关推荐
- java soot_soot的java程序控制流分析及图形化输出-计算机系统应用.pdf
soot的java程序控制流分析及图形化输出-计算机系统应用 计 算 机 系 统 应 用 2009 年 第 10 期 ① Soot 的Java 程序控制流分析及图形化输出 Java Program C ...
- python 可视化编程不友好_为什么大多数程序员不看好图形化编程?
图形化更优还是语言更优,个人认为本质上只取决于一个操作中概念分支(信息密度)的多少. 信息密度低信息量少不代表低端,即使简单的分支也可以组成复杂的逻辑和排列,它可以复杂在逻辑和组合而不是分支与信息的绝 ...
- 零代码入门GitHub,图形化交互让你轻松存代码 | 附Git GUI推荐
鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 传说,程序员遇到火灾时有三个注意事项: 真的不能直接跑路吗? Git是目前世界上最流行的分布式版本控制系统,用上了它,就不必再面对这样的惨 ...
- java gui编程 计算器_Matlab-GUI编程:简单计算器的实现
前言:任何编程语言到了GUI这一块都逃不了要模仿做一个计算器来证明已经入门了.上个学期学java的时候GUI着实不好整,一个计算器硬是没整出来.这学期接触了matlab,虽然他号称是面向对象的编程语言 ...
- java计算器程序代码,图形化界面
实现了加减乘除,平方立方开根号以及小数点运算,代码如下: package test1;import java.awt.*;import java.awt.event.WindowAdapter; im ...
- java反编译微信小程序_教你如何一键反编译获取任何微信小程序源代码(图形化界面,傻瓜式操作)...
一键获取微信小程序源代码 1 Tips:2 一键获取微信小程序源码, 使用了C#加nodejs制作 直接解压在D盘根目录下后就可以使用 将小程序文件放到 wxapkg目录下 3 这个目录下有一些dem ...
- 基于linux的qt五子棋小游戏下载,课内资源 - 基于Qt的图形化界面网络在线对战五子棋游戏...
一 需求分析 本软件是一款跨平台的网络实时五子棋对战软件,实现建立主机和连接主机.实时对战.判断输赢和危险提示等功能.支持Windows . Linux和OSX平台. 程序主要功能如下: 建立服务器 ...
- c 语言计算器带括号优先级,C++结合QT实现带有优先级的计算器功能
代码 MyCalculator.h #pragma once #include #include #include #include "ui_MyCalculator.h" cla ...
- python 图形化开发用什么模块_用python进行GUI开发的选择/python的GUI模块(图形界面开发库)...
Python最大的特点就在于她的快速开发功能.作为一种胶水型语言,python几乎可以渗透在我们编程过程中的各个领域.这里我简单介绍一下用python进行gui开发的一些选择. 1.Tkinter T ...
最新文章
- mysql的学习总结
- OK,让我们开始吧!
- linux内核实验平台搭建,搭建自己的Linux实验系统(一)
- 武汉国家光电实验室计算机考研,2018年华中科技大学武汉国家光电实验室408计算机学科专业基础综合之计算机操作系统考研基础五套测试题...
- TensorBoard使用
- Web前端知识体系精简
- linux 几个文件夹作用,linux下每一个文件夹的作用.docx
- 猪场管理网站php,某养猪场网站整站 v1.1
- oracle中获取列的值,oracle - Oracle-SQL从具有特定列和值的所有表中获取数据 - SO中文参考 - www.soinside.com...
- Spark:windows下配置spark开发环境
- 计算机上缺少vsix安装程序,VSIX安装程序在Visual Studio 2017年(15.3)
- 这个世界上人真的分三六九等,你信吗?
- win10计算机怎么拨号上网,Win10怎么设置自动连接宽带_Win10怎么设置自动拨号连接上网-192路由网...
- win764位loadrunner安装问题:提示:少了Microsoft Visual c++2005 sp1运行时组件,安装时会提示命令行选项语法错误,键入“命令/?”可获取帮肋信息,无法正常安装;
- 产品调研,如何避免「浮于表面」?
- Linux网卡丢包分类整理(1)——网卡篇
- 机器人控制系统的主要功能和特点
- Learning a Discriminative Feature Network for Semantic Segmentation
- 文献综述-家装风格自动分类技术综述
- 如何下载 MySQL安装包