免费海外网站cdn加速,软件开发技术,网页网站怎么做的,专注微信网站建设1 /*2 参考大神nb的代码#xff0c;感觉思路不错#xff01;终于搞明白了#xff01;一开始不明白在计算表达式的时候#xff0c;利用栈到底做了什么#xff01;现在感觉我们利用栈就是模拟我们书面上计算表达式#xff0c;3 将优先级高的运算先计算出来感觉思路不错终于搞明白了一开始不明白在计算表达式的时候利用栈到底做了什么现在感觉我们利用栈就是模拟我们书面上计算表达式3 将优先级高的运算先计算出来然后放进栈中等待下一次的计算4 */5 #includeiostream 6 #includestring 7 #includestack8 #includecstdio9 using namespace std;10 11 class node12 {13 public:14 double ret;15 string prefix, suffix;//前缀表达式和后缀表达式 16 node()17 {18 ret0;19 prefixsuffix; 20 } 21 };22 23 stacknodeoptd;//操作数栈24 stackcharoptr;//操作符栈25 26 char formula[1000];//表达式以 结束 27 28 int cmp(char ch)//定义符号的优先级29 {30 switch(ch)31 {32 case #: return -2;33 case : return -1;34 case :35 case -: return 1;36 case *:37 case /: return 2;38 case (: return 3;39 case ): return 0;40 }41 return -2;42 }43 44 double deal(double x, char ch, double y)45 {46 switch(ch)47 {48 case : return xy;49 case -: return x-y;50 case *: return x*y;51 case /: return x/y;52 }53 return 0.0;54 }55 56 void cal()57 {58 int i0, n;59 node num, aTmp, bTmp;60 while(optr.top()!)61 {62 if(formula[i]0 formula[i]9)63 {64 sscanf(formulai, %lf%n, num.ret, n);65 num.prefix.assign(formulai, n);66 num.suffix.assign(formulai, n);67 in;68 optd.push(num);69 }70 else71 {72 if(optr.top()( formula[i]))//消除一对括弧 73 {74 optr.pop();75 i;76 }77 if(cmp(formula[i]) cmp(optr.top()) || optr.top()()//当前运算符大于栈顶运算符直接进栈78 {79 optr.push(formula[i]);80 i;81 }82 else83 {84 char choptr.top(), preTmp[]{ch, , \0}, sufTmp[]{ , ch, \0} ;85 optr.pop();//弹出一个栈顶操作符 86 bTmpoptd.top(); optd.pop();//得到第二个操作数 87 aTmpoptd.top(); optd.pop();//得到第一个操作数 88 aTmp.retdeal(aTmp.ret, ch, bTmp.ret);89 90 aTmp.suffix bTmp.suffix sufTmp;//得到运算后的后缀式子91 aTmp.prefixpreTmp aTmp.prefix bTmp.prefix;//得到运算前的后缀式子92 optd.push(aTmp);//不要忘记将计算的结果放入栈中 93 }94 }95 }96 optr.pop();//别忘记弹出栈顶上的 97 }98 99 int main()
100 {
101 optr.push(#);//初始化栈顶操作符是‘#’
102 while(cinformula)
103 {
104 cal();
105 node ansoptd.top(); optd.pop();
106 cout表达式结果ans.retendl前缀试ans.prefixendl后缀试ans.suffixendl;
107 }
108 return 0;
109 } 转载于:https://www.cnblogs.com/hujunzheng/p/3785647.html