• 大小: 25KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-05-14
  • 语言: 其他
  • 标签:

资源简介

本项目使用了Qt5.3.2版本进行开发,使用了设计模式中的简单工厂设计模式,支持四则运算,三角函数运算和幂运算,是属于计算器中的科学计算型计算器

资源截图

代码片段和文件信息

#include “operationcalculate.h“
#include 
#include 
#include 

OperationCalculate::OperationCalculate()
{

}

void OperationCalculate::setOperationCalculateStr(QString &strAbstractOperation *abstractOperation)
{
    QString operationCalculateStr;
    operationCalculateStr = str;

    str.clear();
    str.append(“\n“);
    str.append(“=“);

    //将获取到的中缀表达式转换成后缀表达式,使用后缀表达式进行求值
    infixConvertPostfix(operationCalculateStr);
    qDebug() << “后缀表达式“ << operationCalculateStr;
    postFixOperation(operationCalculateStrabstractOperation);
    //将计算的结果赋值给str并显示到界面中
    //只有结果
    str.append(operationCalculateStr);
}

//中缀表达式转后缀表达式
void OperationCalculate::infixConvertPostfix(QString &str)
{
    QStack operatorStack;
    QStringList strList;
    QString temp;

    operatorStack.clear();
    strList.clear();

    //首先将字符串进行切割
    for(int i = 0;i < str.size();i++)
    {
        strList.append(str.mid(i1));
    }

    //用于接受转化的后缀表达式即接收栈的输出
    str.clear();

    /*************中缀变后缀步骤****************/
    for(int i = 0;i < strList.size();i++)
    {
        temp = strList.at(i);
        //遇到左括号 压栈
        if( !temp.compare(“(“) )
        {
            operatorStack.push(temp);
        }else if( !temp.compare(“)“))       //遇到右括号出栈
        {
            str.append(““);
            //不接收右括号的输出
            //判断栈顶元素是否是左括号是左括号则停止出栈
            while( operatorStack.top().compare(“(“) )
            {
                //接收除去左括号和右括号的输出
                str.append(operatorStack.pop());
                str.append(““);
            }

            //将左括号出栈不接收左括号输出
            operatorStack.pop();

        }else if( isOperator(temp) )      //操作符和运算数
        {
            str.append(““);
            //操作符之前先追加一个逗号,区分前后的两个操作数
            //栈顶元素的优先级要高并且栈不为空
            while( !operatorStack.isEmpty() && prePriority(operatorStack.top()temp) > 0 )
            {
                //将栈顶元素出栈并接收
                str.append(operatorStack.pop());
                str.append(““);
            }

            operatorStack.push(temp);

        }else       //是操作数,直接输出
        {
            str.append(temp);
        }
    }

    //遇到负数的情况时,最后的数字后面没有逗号
    if(str.right(1) != ““)
    {
        str.append(““);
    }
    //剩余的运算符出栈
    while(!operatorStack.isEmpty())
    {
        str.append(operatorStack.pop());
        str.append(““);
    }
}

//后缀表达式的运算
void OperationCalculate::postFixOperation(QString &strAbstractOperation *abstractOperation)
{
    QStringList strList;
    QStack stackStr;
    QString unaryOperate;
    QString unaryNum;
    QString temp;
    QString result;

    strList = str.split(““);
    str.clear();
    qDebug() << strList;
    while(strList.contains(““))
    {
        strList.replace(strList.indexOf(““)“0“);
    }

    if( !strList.last().compare(“0“) )
    {
        strList.removeLast();
 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-12-13 09:29  Calculator\
     文件         634  2015-12-11 18:10  Calculator\Calculator.pro
     文件       18233  2015-12-13 09:29  Calculator\Calculator.pro.user
     文件         656  2015-12-13 09:30  Calculator\Readme.txt
     目录           0  2015-12-11 18:09  Calculator\Src\
     目录           0  2015-12-13 09:28  Calculator\Src\OperationCalculate\
     文件          96  2015-12-11 18:10  Calculator\Src\OperationCalculate\OperationCalculate.pri
     文件        6852  2015-12-13 09:28  Calculator\Src\OperationCalculate\operationcalculate.cpp
     文件         736  2015-12-13 09:26  Calculator\Src\OperationCalculate\operationcalculate.h
     目录           0  2015-12-13 09:11  Calculator\Src\OperationFunction\
     文件         802  2015-12-13 09:09  Calculator\Src\OperationFunction\OperationFunction.pri
     文件         551  2015-12-11 16:13  Calculator\Src\OperationFunction\abstractoperation.cpp
     文件         409  2015-12-11 15:05  Calculator\Src\OperationFunction\abstractoperation.h
     文件         220  2015-12-11 16:13  Calculator\Src\OperationFunction\operationadd.cpp
     文件         306  2015-12-11 15:31  Calculator\Src\OperationFunction\operationadd.h
     文件         201  2015-12-12 19:23  Calculator\Src\OperationFunction\operationcos.cpp
     文件         220  2015-12-12 19:22  Calculator\Src\OperationFunction\operationcos.h
     文件         311  2015-12-12 15:28  Calculator\Src\OperationFunction\operationdiv.cpp
     文件         222  2015-12-11 14:12  Calculator\Src\OperationFunction\operationdiv.h
     文件        2266  2015-12-13 09:11  Calculator\Src\OperationFunction\operationfactory.cpp
     文件        1126  2015-12-13 09:11  Calculator\Src\OperationFunction\operationfactory.h
     文件         182  2015-12-12 19:29  Calculator\Src\OperationFunction\operationln.cpp
     文件         230  2015-12-12 19:29  Calculator\Src\OperationFunction\operationln.h
     文件         184  2015-12-12 19:24  Calculator\Src\OperationFunction\operationlog.cpp
     文件         239  2015-12-12 19:24  Calculator\Src\OperationFunction\operationlog.h
     文件         220  2015-12-11 16:14  Calculator\Src\OperationFunction\operationmul.cpp
     文件         220  2015-12-11 14:10  Calculator\Src\OperationFunction\operationmul.h
     文件         205  2015-12-13 09:11  Calculator\Src\OperationFunction\operationpower.cpp
     文件         251  2015-12-13 09:10  Calculator\Src\OperationFunction\operationpower.h
     文件         203  2015-12-12 15:49  Calculator\Src\OperationFunction\operationsin.cpp
     文件         220  2015-12-12 15:43  Calculator\Src\OperationFunction\operationsin.h
............此处省略21个文件信息

评论

共有 条评论