奇怪的表達式求值

問題描述

常規(guī)的表達式求值,我們都會根據(jù)計算的優(yōu)先級來計算。比如*/的優(yōu)先級就高于+-。但是小易所生活的世界的表達式規(guī)則很簡單,從左往右依次計算即可,而且小易所在的世界沒有除法,意味著表達式中沒有/,只有(+, - 和 *)?,F(xiàn)在給出一個表達式,需要你幫忙計算出小易所在的世界這個表達式的值為多少

輸入描述

輸入為一行字符串,即一個表達式。其中運算符只有-,+,*。參與計算的數(shù)字只有0~9.
保證表達式都是合法的,排列規(guī)則如樣例所示。

輸出描述

輸出一個數(shù),即表達式的值

輸入例子

3+5*7

輸出例子

56

分析

表達式只支持+ - *,沒有括號,而且運算符沒有優(yōu)先級,只是按照從左到右的順序運算。通過觀察發(fā)現(xiàn),表達式的正則表達式結(jié)構(gòu)必然是(digit op digit)+,即數(shù)字和運算符是交替出現(xiàn)的。這樣一來計算就變得很簡單了。

note

有運算符優(yōu)先級和括號的復雜表達式的求解,需要用到棧。會牽涉到編譯理論的相關知識。

代碼

#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

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;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 常規(guī)的表達式求值,我們都會根據(jù)計算的優(yōu)先級來計算。比如*/的優(yōu)先級就高于+-。但是小易所生活的世界的表達式規(guī)則很簡...
    六尺帳篷閱讀 265評論 0 1
  • 在某些情況下,我們需要對輸入字符串表達式進行計算,例如一個字符串為:“1 + 2 * 3”,我們需要計算出它的結(jié)果...
    酸菜Amour閱讀 1,596評論 0 6
  • ?1 C語言程序的結(jié)構(gòu)認識 用一個簡單的c程序例子,介紹c語言的基本構(gòu)成、格式、以及良好的書寫風格,使讀者對c語...
    CONLYOUC閱讀 8,894評論 9 66
  • 表達式和運算符 程序中最簡單的表達式就是,程序中的常量 變量名也是一種簡單的表達式 復雜的表達式是由簡單的表達式組...
    zhaolion閱讀 1,730評論 3 12
  • 不知道看到這個題目的你們會立刻想到誰呢,每個人都會有自己的答案吧。那就隨著我,聽聽我的故事吧。那次聽的那...
    瑾瑾陌閱讀 345評論 2 1

友情鏈接更多精彩內(nèi)容