使用C++实现计算器

一、计算器实现的思路

在计算器的实现中,需要将用户输入的算式转换成计算机可以识别和处理的形式,然后进行计算并输出结果。

第一步是将用户输入的中缀表达式转换成后缀表达式,这样方便计算机进行计算。在转换中,需要注意运算符的优先级。

第二步是将转换后的后缀表达式利用栈进行计算,遇到操作数则压入栈中,遇到运算符则出栈两个操作数进行运算,并将运算结果压入栈中。

第三步是将栈中最后一个元素即为计算结果,将其输出给用户。

二、中缀转后缀的实现

中缀表达式转后缀表达式可以使用栈来实现,在将运算符压入栈中前需要弹出优先级比它高或相等的运算符。

vector infix2postfix(vector infix){
    stack s;
    vector postfix;
    map priority;
    priority["+"] = 1;
    priority["-"] = 1;
    priority["*"] = 2;
    priority["/"] = 2;
    priority["("] = 0;
    for(int i=0;i=priority[token]){
                postfix.push_back(s.top());
                s.pop();
            }
            s.push(token);
        }
    }
    while(!s.empty()){
        postfix.push_back(s.top());
        s.pop();
    }
    return postfix;
}

三、后缀表达式的计算实现

后缀表达式的计算可以使用栈来实现,在遇到操作数时将其压入栈中,在遇到运算符时弹出栈顶的两个元素进行计算,将结果再次压入栈中。

int eval_postfix(vector postfix){
    stack s;
    for(int i=0;i<postfix.size();i++){
        string token = postfix[i];
        if(isdigit(token[0])){
            s.push(stoi(token));
        }
        else{
            int b = s.top();
            s.pop();
            int a = s.top();
            s.pop();
            if(token=="+"){
                s.push(a+b);
            }
            else if(token=="-"){
                s.push(a-b);
            }
            else if(token=="*"){
                s.push(a*b);
            }
            else{
                s.push(a/b);
            }
        }
    }
    return s.top();
}

四、完整代码示例

#include 
#include 
#include 
#include 

using namespace std;

vector infix2postfix(vector infix){
    stack s;
    vector postfix;
    map priority;
    priority["+"] = 1;
    priority["-"] = 1;
    priority["*"] = 2;
    priority["/"] = 2;
    priority["("] = 0;
    for(int i=0;i=priority[token]){
                postfix.push_back(s.top());
                s.pop();
            }
            s.push(token);
        }
    }
    while(!s.empty()){
        postfix.push_back(s.top());
        s.pop();
    }
    return postfix;
}

int eval_postfix(vector postfix){
    stack s;
    for(int i=0;i<postfix.size();i++){
        string token = postfix[i];
        if(isdigit(token[0])){
            s.push(stoi(token));
        }
        else{
            int b = s.top();
            s.pop();
            int a = s.top();
            s.pop();
            if(token=="+"){
                s.push(a+b);
            }
            else if(token=="-"){
                s.push(a-b);
            }
            else if(token=="*"){
                s.push(a*b);
            }
            else{
                s.push(a/b);
            }
        }
    }
    return s.top();
}

int main() {
    string input;
    getline(cin, input);
    vector infix;
    string token = "";
    for(int i=0;i<input.length();i++){
        if(input[i]==' '){
            infix.push_back(token);
            token = "";
        }
        else{
            token += input[i];
        }
    }
    infix.push_back(token);
    vector postfix = infix2postfix(infix);
    int result = eval_postfix(postfix);
    cout << result << endl;
    return 0;
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/297149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-28 12:15
下一篇 2024-12-28 12:15

相关推荐

  • 汇率兑换计算器

    汇率兑换计算器是一款方便快捷的工具。它可以将一种货币的价值换算成另一种货币的价值,帮助人们更好地理解并计算不同货币之间的价格。 一、页面设计 汇率兑换计算器的页面设计应该简洁明了,…

    编程 2025-04-27
  • Python制作简易计算器

    本文将从多个方面,详细阐述如何使用Python制作简易计算器。 一、GUI界面设计 要制作一个简易计算器,我们需要先计划好它的GUI界面,以方便用户的使用。在Python中,我们可…

    编程 2025-04-27
  • 工期日历天计算器

    一、计算器介绍 工期日历天计算器是一款计算机程序,用于计算一个任务或项目的完成时间。 用户可以指定开始日期,工作日历和任务工期。该计算器能够自动排除非工作日和特殊工作日期,以提供客…

    编程 2025-04-24
  • 度分秒计算器在线使用

    度分秒是一个在地学和导航定位中常用的角度计量单位,通常情况下需要进行角度单位换算。而度分秒计算器在线使用就是一个便捷的工具,能够帮助用户快速地进行单位换算。本文将就度分秒计算器在线…

    编程 2025-04-12
  • 反三角函数计算器在线

    一、介绍 反三角函数计算器是一种通过输入三角函数的值,返回对应角度值的工具,反三角函数包括反正弦、反余弦和反正切函数。 在计算几何学、三角函数、物理学等领域,反三角函数的应用十分广…

    编程 2025-04-12
  • ArcGIS栅格计算器con函数的应用

    一、con函数简介 con函数是ArcGIS栅格计算器中的一种逻辑函数,主要功能是根据指定的条件,从两个栅格中选择相应的像元值来创建一个新的栅格。 Con (condition, …

    编程 2025-04-12
  • 用Python编写分秒计算器

    分秒计算器是一款简单实用的计算工具,可以帮助人们快速计算时间。本文将从多个方面详细阐述该计算器,包括功能介绍、算法实现、代码解析等。 一、功能介绍 分秒计算器主要有两个功能,分别是…

    编程 2025-02-01
  • 平方米换算亩计算器

    在农业生产过程中,经常需要用到亩数作为计量单位,而现在很多地方已经使用平方米作为测算单位,这时我们需要一个平方米转化为亩的计算器。下面将从多个方面进行详细阐述。 一、计算原理 平方…

    编程 2025-02-01
  • GIS栅格计算器:使用Python实现

    一、介绍 GIS栅格计算器是地理信息科学中常用的工具之一,它可以用于栅格数据的计算、处理和分析。在GIS栅格计算器中,我们可以使用Python语言进行编程实现,Python提供了许…

    编程 2025-01-20
  • c语言模拟计算,c语言模拟计算器输入两个整数和一个运算符

    本文目录一览: 1、c语言模拟简单计算,无优先级,只计算加减乘除,输入没有空格 2、C语言模拟计算器的功能,要求至少能实现基本四则运算(加减乘除功能),要求提示明确.能用/*说明代…

    编程 2025-01-16

发表回复

登录后才能评论