这里要注意各个输入的情况,有正负数,和小数的存在,但题目上没写,这是最烦的。
排序的关键是运算符的优先级问题,以及正负数中的符号与加减号如何区别。还有内括号的先运算。
下面是代码:
#include<iostream>
using namespace std;
#include<stack>
int main()
{
string arr;
cin >> arr;
stack<char> a;
stack<char>c;
int i = 0;
bool flag = true; //用于判断邻接前面是否已经出现了运算符,如果出现了那这个就是正负号
char b,result[200];
while (i<arr.size())
{
switch (arr.at(i))
{
case '+':
if (flag)
{
flag = false;
i++;
break;
}
else
{
if (!c.empty())
{
b = c.top();
if (b == '*' || b == '/')
{
while (!c.empty()&&b!='(') //注意不能将栈中的'('号也输出了。
{
a.push(b);
a.push(' ');
c.pop();
if (!c.empty())
b = c.top();
}
}
}
}
c.push(arr.at(i));
i++;
break;
case'-':
if (flag)
{
a.push(arr.at(i));
flag = false;
i++;
break;
}
else
{
if (!c.empty())//判断栈是否为空
{
b = c.to

本文介绍了一个C++程序,用于解析包含正负数、小数和运算符的表达式,按照运算符优先级规则计算结果。程序使用栈来存储操作数和运算符,确保正确执行求值。
6499





