C++逆波兰式求解

算法

1.建立一个栈
2.遍历字符串:
2.1如果当前元素为操作符就从栈中弹出两个操作数o1,o2进行运算o2.operator(o1),并将结果压栈
2.2如果当前元素为操作数直接压栈

代码

string int2string(int a)
{
    stringstream ss;
    ss<<a;
    string resault;
    ss>>resault;
    return resault;
}
int caculate(vector<string>& str)
{
    //1.建立一个栈
    Stack<int> s;
    //2.遍历字符串
    int o1;
    int o2;
    int resault;
    for(int i=0;i<str.size();i++)
    {
        //2.1如果当前元素为操作符则从栈中先后弹出两个操作数o1,o2.并做对应的运算o2.operator(o1),并将结果再压入栈中
        if(str[i] == "+" || str[i] == "-" || str[i] == "*" || str[i] == "/"){
            if(str[i] == "+"){
                o1 = s.pop();
                o2 = s.pop();
                resault = o2+o1;
                s.push(resault);
            }
            else if(str[i] == "-"){
                o1 = s.pop();
                o2 = s.pop();
                resault = o2-o1;
                s.push(resault);
            }
            else if(str[i] == "*"){
                o1 = s.pop();
                o2 = s.pop();
                resault = o2*o1;
                s.push(resault);
            }
            else if(str[i] == "/"){
                o1 = s.pop();
                o2 = s.pop();
                resault = o2/o1;
                s.push(resault);
            }
        }
        //2.2如果是操作数就压栈
        else{
            s.push(string2int(str[i]));
        }
    }
    //3.遍历结束后将栈中的内容弹出就是运算结果
    return s.pop();
}

你可能感兴趣的:(C++逆波兰式求解)