西工大机试 计算表达式的值
题目描述:输入行数,再在每行输入一个表达式,得出结果 输入实例: 3 1+1 2.2/3 1+2*3 输出示例: 2.0 0.7 7.0 思路:把中缀表达式转后缀表达式,边转换边计算。设置一个数字栈s1,一个符号栈s2,遍历字符串s,数字直接进栈,在计算数学算式时是先乘除后加减,同优先级从左到右按顺序计算。所以遇到'+'、'-',s2里的符号都要在'+'、'-'之前算,把s2里符号依次出栈,不断取s1的两个数字计算结果并入栈s1,再把符号入栈。遇到'*'、'\',把s2里的'*'、'\'出栈,计算结果,入栈符号。最后处理符号栈剩余符号。 #include <iostream> #include <string> #include <stack> using namespace std; double get_number(string &s,int &i) { string number; for(;i<s.length();i++) { if((s[i]>='0'&&s[i]<='9')||s[i]=='.'){ number.insert(number.end(),s[i]); } else { i--; break; } } return stod(number); } void fuhao(stack<double> &s1,stack<char> &s2) {