奇怪的表达式求值

问题描述

常规的表达式求值,我们都会根据计算的优先级来计算。比如*/的优先级就高于+-。但是小易所生活的世界的表达式规则很简单,从左往右依次计算即可,而且小易所在的世界没有除法,意味着表达式中没有/,只有(+, - 和 *)。现在给出一个表达式,需要你帮忙计算出小易所在的世界这个表达式的值为多少

输入描述

输入为一行字符串,即一个表达式。其中运算符只有-,+,*。参与计算的数字只有0~9.
保证表达式都是合法的,排列规则如样例所示。

输出描述

输出一个数,即表达式的值

输入例子

3+5*7

输出例子

56

分析

表达式只支持+ - *,没有括号,而且运算符没有优先级,只是按照从左到右的顺序运算。通过观察发现,表达式的正则表达式结构必然是(digit op digit)+,即数字和运算符是交替出现的。这样一来计算就变得很简单了。

note

有运算符优先级和括号的复杂表达式的求解,需要用到栈。会牵涉到编译理论的相关知识。

代码

#include 
#include 
#include 
#include 
#include 

using namespace std;

int main()
{
    string str;
    getline(cin, str);

    int ret = str[0] - '0';
    for (int i = 1; i < str.size(); i += 2)
    {
        char c = str[i];
        int val = str[i + 1] - '0';

        switch (c)
        {
        case '+':
            ret += val;
            break;
        case '-':
            ret -= val;
            break;
        case '*':
            ret *= val;
            break;
        }
    }

    printf("%d\n", ret);

    return 0;
}

你可能感兴趣的:(奇怪的表达式求值)