• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 183,  comments - 10,  trackbacks - 0

            后綴表達(dá)式的計(jì)算

            表達(dá)式運(yùn)算過(guò)程中,需要先做中綴表達(dá)式到后綴表達(dá)式的轉(zhuǎn)換。
            這里現(xiàn)對(duì)后綴表達(dá)式求值進(jìn)行解答。

            對(duì)后綴表達(dá)式進(jìn)行掃描,遇到操作數(shù)將操作數(shù)壓棧,遇到運(yùn)算符將操作數(shù)出棧,進(jìn)行運(yùn)算,將運(yùn)算的結(jié)果壓入到操作數(shù)棧中。
            注意,對(duì)于雙目運(yùn)算符,在堆操作數(shù)棧出棧的時(shí)候要注意,后彈出的操作符為左邊的操作符,不要弄反了。

            之前的做法是錯(cuò)誤的,把后綴表達(dá)式存在一個(gè)棧中,只對(duì)棧頂操作,對(duì)于 a b c + * 這種情況不成立。

            實(shí)現(xiàn)如下:

             1 #include <iostream>
             2 #include <vector>
             3 #include <string>
             4 #include <stack>
             5 #include <sstream>
             6 #include <cstdlib>
             7 using namespace std;
             8 
             9 void getPost(vector<string>& post)
            10 {
            11     post.clear();
            12     string tmp;
            13     while (cin >> tmp)
            14     {
            15         post.push_back(tmp);
            16     }
            17 }
            18 
            19 double stringToDouble(const string& s)
            20 {
            21     return (atof(s.c_str()));
            22 }
            23 
            24 double evalPost(const vector<string>& post)
            25 {
            26     stack<double> operands;
            27     int a, b;
            28     for (vector<string>::size_type i = 0; i != post.size(); ++i)
            29     {
            30         if (post[i] == "+")
            31         {
            32             b = operands.top();
            33             operands.pop();
            34             a = operands.top();
            35             operands.pop();
            36             operands.push(a + b);
            37         }
            38         else if (post[i] == "-")
            39         {
            40             b = operands.top();
            41             operands.pop();
            42             a = operands.top();
            43             operands.pop();
            44             operands.push(a - b);
            45         }
            46         else if (post[i] == "*")
            47         {
            48             b = operands.top();
            49             operands.pop();
            50             a = operands.top();
            51             operands.pop();
            52             operands.push(a * b);
            53         }
            54         else if (post[i] == "/")
            55         {
            56             b = operands.top();
            57             operands.pop();
            58             a = operands.top();
            59             operands.pop();
            60             operands.push(a / b);
            61         }
            62         else if (post[i] == "%")
            63         {
            64             b = operands.top();
            65             operands.pop();
            66             a =operands.top();
            67             operands.pop();
            68             operands.push(a - b);
            69         }
            70         else
            71         {
            72             // stringstream ss;
            73             // ss << post[i];
            74             // ss >> a;
            75             operands.push(stringToDouble(post[i]));
            76         }
            77     }
            78     return operands.top();
            79 }
            80 
            81 int main()
            82 {
            83     vector<string> post;
            84     getPost(post);
            85     cout << evalPost(post) << endl;
            86     return 0;
            87 }


            posted on 2011-06-28 23:20 unixfy 閱讀(695) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            成人国内精品久久久久一区| 中文字幕人妻色偷偷久久| 久久免费精品视频| 国产一区二区精品久久岳| 99精品国产免费久久久久久下载| 久久久无码精品亚洲日韩蜜臀浪潮| 无码人妻久久久一区二区三区| 久久97精品久久久久久久不卡| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 亚洲天堂久久久| 国产成人精品白浆久久69| 久久国产综合精品五月天| 久久精品一区二区三区AV| 丁香五月综合久久激情| 人妻少妇久久中文字幕 | 久久久一本精品99久久精品88| 国产免费久久精品丫丫| 久久婷婷五月综合色奶水99啪| 久久一本综合| 狠狠色伊人久久精品综合网| 九九久久自然熟的香蕉图片| 精品久久久久久无码中文字幕 | 少妇熟女久久综合网色欲| 久久精品亚洲精品国产欧美| 亚洲精品国产成人99久久| 久久精品国产亚洲av影院| 亚洲国产精品成人久久蜜臀| 国产精品免费久久| 91久久九九无码成人网站| 久久精品无码一区二区三区| 久久久国产乱子伦精品作者 | 国产69精品久久久久777| 久久午夜羞羞影院免费观看| 亚洲乱码精品久久久久..| 国产香蕉久久精品综合网| 99久久国产综合精品成人影院| 久久精品人人做人人爽电影蜜月| 久久久亚洲欧洲日产国码aⅴ| 精品久久久久久亚洲精品| 麻豆成人久久精品二区三区免费 | 亚洲中文字幕久久精品无码APP|