本题要求:对一个不带括号的表达式进行运算。
例 输入:6/2+3+3*4
输出:18
#include<iostream>
#include<string>
#include<map>
#include<stack>
using namespace std;
int main() {
char str[1000] = { 0 };
map<char, int> pri = {
{'\0',0},
{'+',1},{'-',1},
{'*',2},{'/',2}
};
while (cin>>str){
string numstr = " ";//设置一个空串
stack<char> opstack;
stack<double> numstack;
for (int i = 0;; i++) {
if (str[i] >= '0' && str[i] <= '9') {
numstr.push_back(str[i]);//将当前字符放在字符串尾
}
else {
double num = stod(numstr);
numstr = " ";
numstack.push(num);
//栈非空 && 新op优先级不高 弹栈
while (!opstack.empty() && (pri[str[i]] <= pri[opstack.top()])) {
double rhs = numstack.top();
numstack.pop();
double lhs = numstack.top();
numstack.pop();
char curop = opstack.top();
opstack.pop();
if (curop == '+')
numstack.push(lhs + rhs);
else if (curop == '-')
numstack.push(lhs - rhs);
else if (curop == '*')
numstack.push(lhs * rhs);
else if (curop == '/')
numstack.push(lhs / rhs);
}
}
if (str[i] == '\0') {
printf("%d\n", (int)numstack.top());
break;
}
//压栈 栈为空或新op优先级高
else
opstack.push(str[i]);
}
}
system("pause");
return 0;
}