📄 12_3_1.cpp
字号:
#include <iostream.h>
#include "stdlib.h"
#include "Stack.cpp"
int GetPriority(char optr)
{
switch (optr)
{
case '+':
return 1;
case '-':
return 1;
case '*':
return 2;
case '/':
return 2;
default:
throw "运算符错误";
}
}
double Calculate(double a, double b, char o)
{
switch (o)
{
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
throw "运算符出错";
}
}
void main()
{
char expr[100];
cout << "请输入表达式:" << endl;
cin >> expr;
int p = 0;
Stack<char> optr;
optr.Push('#');
Stack<double> opnd;
int i = 0;
while (expr[i] != '\0')
{
i++;
}
if (expr[i - 1] != '#')
{
expr[i] = '#';
expr[i + 1] = '\0';
}
while (expr[p] != '\0')
{
// 将下一个要处理的字符输入ch
char ch[10];
int len = 0;
if (expr[p] >= '0' && expr[p] <= '9')
{
while (expr[p + len] >= '0' && expr[p + len] <= '9')
{
ch[len] = expr[p + len];
len++;
}
ch[p + len] = '\0';
}
else
{
ch[0] = expr[p];
}
p++;
if (ch[0] == '#')
{
while (optr.GetTop() != '#')
opnd.Push(Calculate(opnd.Pop(), opnd.Pop(), optr.Pop()));
cout << opnd.Pop() << endl;
break;
}
else if (ch[0] >= '0' && ch[0] <= '9')
opnd.Push(atoi(ch));
else
{
char t = optr.GetTop();
if (t == '#')
optr.Push(ch[0]);
else
{
if (GetPriority(ch[0]) == GetPriority(t))
{
opnd.Push(Calculate(opnd.Pop(), opnd.Pop(), optr.Pop()));
optr.Push(ch[0]);
}
else if (GetPriority(ch[0]) > GetPriority(t))
optr.Push(ch[0]);
else
{
opnd.Push(Calculate(opnd.Pop(), opnd.Pop(), optr.Pop()));
optr.Push(ch[0]);
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -