青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 183,  comments - 10,  trackbacks - 0

表達(dá)式的運(yùn)算

總共分兩個步驟
·中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式
·后綴表達(dá)式的計算

中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式:
掃描一遍中綴表達(dá)式
操作符棧
左括號和右括號的特殊性
運(yùn)算符的優(yōu)先級

后綴表達(dá)式的計算:
掃描一遍后綴表達(dá)式
操作數(shù)棧
當(dāng)前操作符,操作數(shù)棧出棧計算,注意雙目運(yùn)算符的左右順序

表達(dá)式運(yùn)算的整個過程,利用了兩個棧
·操作符棧
·操作數(shù)棧
分別應(yīng)用于第一和第二步驟中。

在做中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式的過程中需要注意左括號和右括號的入棧出棧,其他操作符相對左括號和右括號的入棧和出棧。注意左括號的棧內(nèi)優(yōu)先級與棧外優(yōu)先級的區(qū)別。


實現(xiàn):
  1 //
  2 // 表達(dá)式運(yùn)算
  3 // Mark
  4 // email: goonyangxiaofang AT 163.com
  5 // QQ   : 591247876
  6 // 2011.6.29
  7 // ( ( 1 + 2 ) * 3 + ( 1 + 10 ) ) / 2
  8 // ???
  9 //
 10 
 11 #include <iostream>
 12 #include <string>
 13 #include <vector>
 14 #include <stack>
 15 #include <map>
 16 #include <cstdlib>
 17 using namespace std;
 18 
 19 map<stringint> operatorPriors;
 20 
 21 void getInfix(vector<string>& infix)
 22 {
 23     infix.clear();
 24     string tmp;
 25     while (cin >> tmp)
 26     {
 27         infix.push_back(tmp);
 28     }
 29 }
 30 
 31 void init()
 32 {
 33     operatorPriors["+"= 10;
 34     operatorPriors["-"= 10;
 35     operatorPriors["*"= 20;
 36     operatorPriors["/"= 20;
 37     operatorPriors["%"= 20;
 38     operatorPriors["("= 30;
 39     operatorPriors[")"= 0;
 40 }
 41 
 42 bool prior(const string& op1, const string& op2)
 43 {
 44     return operatorPriors[op1] > operatorPriors[op2];
 45 }
 46 
 47 bool isOperator(const string& s)
 48 {
 49     return operatorPriors.find(s) != operatorPriors.end();
 50 }
 51 
 52 void print(stack<string> operators)
 53 {
 54     while (!operators.empty())
 55     {
 56         cout << operators.top() << ' ';
 57         operators.pop();
 58     }
 59     cout << endl;
 60 }
 61 
 62 const vector<string>& infixToPostfix(vector<string>& postfix, const vector<string>& infix)
 63 {
 64     postfix.clear();
 65     stack<string> operators;
 66     for (vector<string>::size_type i = 0; i != infix.size(); ++i)
 67     {
 68         if (isOperator(infix[i]))
 69         {
 70             if (operators.empty())
 71             {
 72                 operators.push(infix[i]);
 73             }
 74             else if (operators.top() == "(" && infix[i] != ")" || prior(infix[i], operators.top()))
 75             {
 76                 operators.push(infix[i]);
 77             }
 78             else
 79             {
 80                 if (infix[i] == ")")
 81                 {
 82                     while (operators.top() != "(")
 83                     {
 84                         postfix.push_back(operators.top());
 85                         operators.pop();
 86                     }
 87                     operators.pop();
 88                 }
 89                 else
 90                 {
 91                     postfix.push_back(operators.top());
 92                     operators.pop();
 93                     while (!operators.empty() && !prior(infix[i], operators.top()) && operators.top() != "(")
 94                     {
 95                         postfix.push_back(operators.top());
 96                         operators.pop();
 97                     }
 98                     
 99                     operators.push(infix[i]);
100                 }
101             }
102         }
103         else
104         {
105             postfix.push_back(infix[i]);
106         }
107     }
108     while (!operators.empty())
109     {
110         postfix.push_back(operators.top());
111         operators.pop();
112     }
113     return postfix;
114 }
115 
116 double stringToDouble(const string& s)
117 {
118     return (atof(s.c_str()));
119 }
120 
121 double evalPost(const vector<string>& post)
122 {
123     stack<double> operands;
124     int a, b;
125     for (vector<string>::size_type i = 0; i != post.size(); ++i)
126     {
127         if (post[i] == "+")
128         {
129             b = operands.top();
130             operands.pop();
131             a = operands.top();
132             operands.pop();
133             operands.push(a + b);
134         }
135         else if (post[i] == "-")
136         {
137             b = operands.top();
138             operands.pop();
139             a = operands.top();
140             operands.pop();
141             operands.push(a - b);
142         }
143         else if (post[i] == "*")
144         {
145             b = operands.top();
146             operands.pop();
147             a = operands.top();
148             operands.pop();
149             operands.push(a * b);
150         }
151         else if (post[i] == "/")
152         {
153             b = operands.top();
154             operands.pop();
155             a = operands.top();
156             operands.pop();
157             operands.push(a / b);
158         }
159         else if (post[i] == "%")
160         {
161             b = operands.top();
162             operands.pop();
163             a =operands.top();
164             operands.pop();
165             operands.push(a - b);
166         }
167         else
168         {
169             // stringstream ss;
170             // ss << post[i];
171             // ss >> a;
172             operands.push(stringToDouble(post[i]));
173         }
174     }
175     return operands.top();
176 }
177 
178 int main()
179 {
180     init();
181     vector<string> infix;
182     vector<string> postfix;
183     getInfix(infix);
184     infixToPostfix(postfix, infix);
185     for (vector<string>::size_type i = 0; i != postfix.size(); ++i)
186     {
187         cout << postfix[i] << ' ';
188     }
189     cout << endl;
190     cout << evalPost(postfix) << endl;
191     return 0;
192 }


posted on 2011-06-29 01:58 unixfy 閱讀(169) 評論(0)  編輯 收藏 引用

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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产日韩精品综合网站| 91久久午夜| 狼人天天伊人久久| 欧美专区亚洲专区| 欧美在线影院| 久久精品盗摄| 免费观看不卡av| 欧美成年人视频网站| 欧美国产免费| 欧美日韩亚洲91| 国产精品视频九色porn| 国产亚洲精品成人av久久ww| 精久久久久久| 日韩亚洲欧美高清| 99riav久久精品riav| 欧美亚洲一区三区| 麻豆精品网站| 一本久道综合久久精品| 亚洲小说春色综合另类电影| 久久久91精品国产一区二区精品| 免费日韩av片| 久久国产精品毛片| 久久综合99re88久久爱| 免费在线观看成人av| 亚洲日本成人在线观看| 欧美激情精品久久久| 一区二区三区波多野结衣在线观看| 亚洲一区三区视频在线观看| 欧美中文字幕在线观看| 欧美人与性禽动交情品 | 国产精品久久久久久av福利软件 | 久久最新视频| 欧美黄色aaaa| 国产在线日韩| 亚洲一区二区三区在线| 免费在线亚洲欧美| 午夜精品久久久久| 欧美日韩日韩| 最新亚洲一区| 久久久一区二区三区| 亚洲精品资源| 欧美国产另类| 亚洲国产一区视频| 久久婷婷亚洲| 欧美在线视频观看免费网站| 国产精品国产三级国产aⅴ9色| 亚洲精品乱码| 免费观看亚洲视频大全| 久久国产精品久久久久久电车| 国产精品久久久久99| 亚洲香蕉网站| 日韩视频精品在线| 欧美精品久久久久a| 亚洲人永久免费| 女生裸体视频一区二区三区| 亚洲精品午夜精品| 久久综合五月天婷婷伊人| 新67194成人永久网站| 欧美视频在线免费| 亚洲人成啪啪网站| 美女999久久久精品视频| 欧美一区二区三区婷婷月色 | 欧美在线日韩精品| 国产精品美女久久久久久免费| 亚洲免费观看| 日韩视频免费看| 国产精品国产成人国产三级| 亚洲网站啪啪| 亚洲一区二区三区久久| 国产精品视频免费观看| 欧美一级日韩一级| 午夜在线一区二区| 一区二区三区在线不卡| 欧美搞黄网站| 欧美日韩成人网| 亚洲欧美日韩天堂一区二区| 亚洲欧美中文字幕| 欲香欲色天天天综合和网| 欧美国产日韩视频| 欧美日韩在线另类| 免费视频亚洲| 久久综合亚州| 日韩一级在线观看| 这里只有视频精品| 国产亚洲欧美一区二区| 欧美成人一区二区三区| 欧美日韩福利视频| 午夜久久黄色| 老司机午夜精品| 亚洲天堂激情| 久久精品天堂| 国产精品99久久久久久宅男 | 欧美激情综合五月色丁香| 一区二区三区国产精华| 亚洲欧美日韩国产| 亚洲黑丝在线| 亚洲欧美在线看| 91久久精品国产91性色| 亚洲一区三区视频在线观看| 亚洲人www| 亚洲欧美中日韩| 亚洲精品一区二区网址| 午夜精品久久久久久99热软件| 亚洲黄色大片| 欧美一区综合| 亚洲欧美综合精品久久成人| 蜜臀av一级做a爰片久久| 欧美中文字幕不卡| 久久久久久久一区| 欧美日韩免费观看一区=区三区| 久久人人看视频| 国产精品女同互慰在线看| 亚洲电影免费| 国内精品一区二区| 亚洲一区二区三区精品在线| 一二三区精品| 欧美高清在线精品一区| 久久综合久久久久88| 国产精品综合| 亚洲色图制服丝袜| 一区二区三区久久| 欧美黑人国产人伦爽爽爽| 久热re这里精品视频在线6| 国产精品福利在线观看| 亚洲人午夜精品| 伊人成人网在线看| 欧美亚洲日本国产| 午夜久久影院| 欧美日韩在线一区| 亚洲精品久久久一区二区三区| 精品动漫3d一区二区三区免费| 午夜精品久久| 欧美一区二区免费| 国产精品欧美风情| 亚洲少妇在线| 亚洲欧美国产77777| 欧美日韩99| 亚洲另类自拍| 一本色道久久综合亚洲精品不| 欧美成人一区二区三区在线观看| 牛夜精品久久久久久久99黑人| 国产一区二区三区观看| 欧美一区二区福利在线| 国产精品久久久久国产精品日日| 久久久久久久高潮| 国产一区二区三区日韩| 午夜精品在线看| 久久久99爱| 尤物yw午夜国产精品视频| 欧美怡红院视频| 久久一区二区三区超碰国产精品| 好吊妞这里只有精品| 亚洲综合色婷婷| 国产女优一区| 久久久久91| 亚洲日本欧美| 亚洲欧美国产精品专区久久| 国产欧美日韩综合精品二区| 欧美一区二区视频在线| 久久天天躁狠狠躁夜夜av| 黄色国产精品一区二区三区| 久久久伊人欧美| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲一区二区三区在线| 狠狠综合久久| 欧美乱大交xxxxx| 亚洲欧美综合v| 亚洲高清久久久| 欧美亚洲视频在线观看| 亚洲国产精品一区二区第一页| 欧美人成免费网站| 新67194成人永久网站| 亚洲国产导航| 欧美一级网站| 最新日韩欧美| 国产精品中文字幕欧美| 美国十次成人| 亚洲男人第一av网站| 美女日韩欧美| 午夜精品福利一区二区蜜股av| 在线观看精品一区| 欧美午夜精品久久久久久浪潮 | 欧美高清影院| 欧美伊久线香蕉线新在线| 亚洲激情第一页| 午夜精品在线看| 99国产麻豆精品| 悠悠资源网亚洲青| 国产精品亚洲欧美| 欧美日本中文| 久久欧美中文字幕| 午夜激情综合网| 亚洲图片欧美午夜| 亚洲精品在线免费| 免费看的黄色欧美网站| 久久精品国产欧美激情| 亚洲欧美精品中文字幕在线| 夜夜嗨av一区二区三区四季av| 红桃视频国产精品| 国产日韩欧美精品|