滑稽,用C++写一个计算器(表达式求值)

本文介绍了如何使用C++编写一个计算器,通过两个栈实现表达式求值。思路涉及数字入操作数栈,运算符根据优先级判断入栈,并详细处理括号。代码经过部分测试,但可能存在错误,欢迎讨论指正。文章还提到,未来可考虑增加图形界面以提升用户体验。

写在前面: 我是「虐猫人薛定谔i」,一个不满足于现状,有梦想,有追求的00后
\quad
本博客主要记录和分享自己毕生所学的知识,欢迎关注,第一时间获取更新。
\quad
不忘初心,方得始终。
\quad

❤❤❤❤❤❤❤❤❤❤

设计要求

要求实现一个能进行表达式求值的计算器。
在这里插入图片描述

思路分析

用两个栈来实现表达式求值,其中一个是运算符栈,另一个是操作数栈,从左到右扫描表达式,如果是数字则进入操作数栈,如果是运算符,则应根据当前运算符与栈顶运算符的优先级来确定是否入栈。对于左右括号,左括号直接压入操作符栈,当遇到右括号时,将操作符栈中的运算符依次弹出并进行相应的运算,直到遇到左括号。
在这里插入图片描述

代码实现

#include <iostream>
#include <map>
#include <string>
#include <cstring>
#include <stack>
#include <sstream>
using namespace std;

double calcVal(double x, double y, string op);
map<string, int> imap = {
   
   {
   
   "+", 0}, {
   
   "-", 0}, {
   
   "*", 1}, {
   
   "/", 1},{
   
   "(",-1}};

int main()
{
   
   
    string line;
    while (getline(cin, line))
    {
   
   
        istringstream is(line);
        stack<string> op;
        stack<double> nums;
        string ch;
        while (is >> ch)
        {
   
   
            if (ch=="(")
            {
   
   
                op.push(ch);
            }
            else if (ch == ")")
            {
   
   
                string oper = op.top();
                while (oper!="(")
                {
   
   
                    double x = nums.top();
                    nums.pop();
                    double y = nums.top
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值