C++

表达式求值

http://www.nowcoder.com/practice/9566499a2e1546c0a257e885dfdbf30d

#include<iostream>
#include<stack>
using namespace std;
int pos;
int result(const string& data)
{
    int num=0;
    char flag = '+';
    stack<int> stk;
    int len = data.length();
    while(pos<len)
    {
        if(data[pos] == '(')
        {
            pos++;
            num = result(data);
        }
        while(pos<len && isdigit(data[pos]))
        {
            num =num*10+ data[pos] - '0';
            pos ++;
        }
        switch(flag)
        {
            case '+':
            {
                stk.push(num);
                break;
            }
            case '-':
            {
                stk.push(-num);
                break;
            }
            case '*':
            {
                stk.top() *= num;
                break;
            }
            case '/':
            {
                stk.top() /= num;
                break;
            }
        }
        num = 0;
        flag = data[pos];
        if(data[pos] == ')')
        {
            ++pos;
            break;
        }
        ++pos;
    }
    int sum = 0;
    while(!stk.empty())
    {
        sum += stk.top();
        stk.pop();
    }
    return sum;
}
int main()
{
    string str;
    cin>>str;
    pos = 0;
    cout<<result(str);
    return 0;
}

在wzq_hwx老哥的代码上改的,那几处实在别扭。

全部评论
负数乘除不能处理啊 420+5*-4 这种
点赞 回复
分享
发布于 2021-10-04 17:05
老哥,num =num*10+ data[pos] - '0';你这个'0'是啥意思啊?查了下ascii,这个‘0’好像还是0啊。小弟愚钝,看不懂。。。。
点赞 回复
分享
发布于 2021-10-19 15:25
滴滴
校招火热招聘中
官网直投
明白了,是把输入的数字字符转为ascii的十进制数字。。。。
点赞 回复
分享
发布于 2021-10-19 15:32
(3*8+5)*2 = 5?
点赞 回复
分享
发布于 2022-05-27 12:21

相关推荐

9 5 评论
分享
牛客网
牛客企业服务