//实现 对 + - * / 的四则运算
#include<iostream>
#include<stack>
using namespace std;
stack<char> OPND;// 运算数
stack<char> OPTR;//运算符
char cmp(char a, char b)
{//考虑情况
if (a == '#') return '<';
if (b == '#') return '>';
int ta, tb;
if (a == '+' || a == '-') ta = 1; else ta = 2;
if (b == '+' || b == '-') tb = 1; else tb = 2;
return (ta < tb) ? '<' : '>';
//这里隐含了一个情况 就是 如果ta==tb,此时应返回'<';
}
char Opt(char a, char s, char b)
{
char t;
switch (s)
{
case '+':t = a - 48 + b - 48 + 48;
break;
case '-':t = a - 48 - (b - 48) + 48;
break;
case '*':t = (a - 48) * (b - 48) + 48;
break;
case '/':t = (a - 48) / (b - 48) + 48;
break;
}
return t;
}
//by zhaoyang 2014.4.16
int main()
{
OPTR.push('#');
cout << "输入算式请以#结尾 操作数请位于0到9之间" << endl;;
char c;
c = getchar();
while (c != '#' || OPTR.top() != '#')
{
if (c >= '0' && c <= '9') { OPND.push(c); c = getchar(); }
else//过滤不严
{
switch (cmp(OPTR.top(), c))
{
case '<': OPTR.push(c); c = getchar(); break;
//case '=': OPTR.pop(); c = getchar(); break;
case '>':
char s = OPTR.top(); OPTR.pop();
char a, b,count;
b = OPND.top(); OPND.pop();
a = OPND.top(); OPND.pop();
count = Opt(a, s, b);
OPND.push(count);
break;
}
}
}
cout << OPND.top() << endl;
return 0;
}
7. 使用栈实现加减乘除四则运算
最新推荐文章于 2023-02-24 23:28:44 发布