实现计算器4则运算算法-分离算法
来源:互联网 发布:如何评价涛哥 知乎 编辑:程序博客网 时间:2024/05/16 01:53
源代码如下:
头文件
#ifndef _CALCULATORCORE_H_#define _CALCULATORCORE_H_#include <QString>#include <QStack>#include <QQueue>class QCalculatorDec{protected:
QString m_exp; //运算表达式QString m_result; //计算结果bool isDigitOrDot(QChar c);//数字或小数点bool isSymbol(QChar c);// 是符号bool isSign(QChar c); //bool isNumber(QString s);bool isOperator(QString s);bool isLeft(QString s);bool isRight(QString s);int priority(QString s);QQueue<QString> split(const QString& exp);public:
QCalculatorDec();~QCalculatorDec();bool expression(const QString& exp);QString expression();QString result();};#endif
源文件
#include "QCalculatorDec.h"#include <QDebug>QCalculatorDec::QCalculatorDec()
{m_exp = "";m_result = "";QQueue<QString> r = split("+10.3 +(-3 - -0.54)* +100");for(int i=0; i<r.length(); i++){
qDebug() << r[i];}
}QCalculatorDec::~QCalculatorDec(){}//是否为数字(0-9)或者小数点
bool QCalculatorDec::isDigitOrDot(QChar c){return (('0' <= c) && (c <= '9')) || (c == '.');}//是否为操作符或者括号
bool QCalculatorDec::isSymbol(QChar c){return isOperator(c) || (c == '(') || (c == ')');}//是否为正负号
bool QCalculatorDec::isSign(QChar c){return (c == '+') || (c == '-');}//是否为一个合法的数字
bool QCalculatorDec::isNumber(QString s){bool ret = false;s.toDouble(&ret);
return ret;}// 是否是运算符bool QCalculatorDec::isOperator(QString s){return (s == "+") || (s == "-") || (s == "*") || (s == "/");}// 是否为左括号bool QCalculatorDec::isLeft(QString s){return (s == "(");}//是否为右括号
bool QCalculatorDec::isRight(QString s){return (s == ")");}//符号优先级
int QCalculatorDec::priority(QString s){int ret = 0;if( (s == "+") || (s == "-") ){
ret = 1;}
if( (s == "*") || (s == "/") ){
ret = 2;}
return ret;}bool QCalculatorDec::expression(const QString& exp){bool ret = false;return ret;}QString QCalculatorDec::result(){return m_result;}//分离符号和数字的分离算法
QQueue<QString> QCalculatorDec::split(const QString& exp){QQueue<QString> ret;QString num = "";QString pre = "";for(int i=0; i<exp.length(); i++){
if( isDigitOrDot(exp[i]) ){
num += exp[i];pre = exp[i]; //为判断+,-是否为正负号,而使用的}
else if( isSymbol(exp[i]) ){
if( !num.isEmpty() ){
ret.enqueue(num);//分离的数字入队列num.clear();
}
if( isSign(exp[i]) && ((pre == "") || (pre == "(") || isOperator(pre)) ){
num += exp[i];//存储正负号}
else{
ret.enqueue(exp[i]); // 运算符入队列}
pre = exp[i];//保存上一个字符}
}
if( !num.isEmpty() ){
ret.enqueue(num);//最后一个运算数}
return ret;}
阅读全文
0 0
- 实现计算器4则运算算法-分离算法 理论
- 实现计算器4则运算算法-分离算法
- 实现计算器4则运算算法-中缀表达式转后缀表达式
- java实现简单计算器算法--支持浮点数运算
- JAVA计算器算法实现
- java 实现简单计算器算法
- 计算器算法的简单实现
- 计算器算法
- PyQt4--QThread实现界面与算法分离
- matlab实现PS算法之色调分离
- 基于堆栈的计算器实现算法
- 基于堆栈的计算器实现算法
- winfrom计算器,使用栈实现算法
- 计算器核心算法代码实现(Java)
- 初级计算器算法(栈处理运算符优先级)
- Pid控制算法-积分分离pid算法C++实现
- <算法>递归实现阶乘运算
- 算法 六度分离
- [ProtoBuf]ProtoBuf命令生成的Cpp文件分析
- Centos克隆后修改主机名称和网络IP
- 为什么Tensorflow需要使用"图计算"来表示计算过程
- 叉积极角排序
- C++ Primer 7.0~7.3部分节练习&笔记
- 实现计算器4则运算算法-分离算法
- hdu 1255 矩形面积交
- for-in循环和for循环遍历数组
- 多线程:线程同步
- Mac:nodejs安装
- Android手机抓取log日志
- 习题6-14-欧拉道路
- 单链表结点插入
- 读书笔记_软件框架设计的艺术