文章

14

粉丝

230

获赞

26

访问

71.2k

头像
用 操作数栈+运算符栈 解决中缀表达式计算问题

思路:

  • 两个栈,操作数栈和运算符栈
  • 当扫描到操作数,压入操作数栈
  • 当扫描到运算符,则比较当前字符优先级,和运算符栈顶元素的优先级,如果栈顶的优先级高,需要先运算,应该弹栈运算,直到当前运算符的优先级高,将当前字符压入栈
  • 每弹出一个运算符,操作数栈应该弹出2个数,进行运算,将结果压入操作数栈

带注释代码

#include<bits/stdc++.h>

using namespace std;
map<char,int> m=
{
    {'+',2},{'-',2},{'*',1},{'/',1},
};
//找到以数字开头的字符串str中的第一个完整的数字 
//如12+36 找到12
//num是找到的数字 12
//返回:数字的长度  12即长度为2
int getNumber(string str,int& num)
{
    int len = str.size();
    int i;
    for(i=0; i<len; i++)
    {
        char c= str[i];
        if(c<'0'||c>'9')
            break;
    }
    num=stoi(str.substr(0,i));
    return i;
}
//计算
int cal(int a,int b,char c)
{
    switch(c)
    {
    case '+':
        return a+b;
    case '-':
        return a-b;
    case '*':
        return a*b;
    case '/':
        return a/b;
    }
}
int main()
{
    string str;
    stack<char> s;//符号栈
    stack<int> n; //操作数栈
    while(cin>>str)
    {
        int len =str.si...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发