#include<iostream>
#include<stack>
#include<set>
using namespace std;
string TurnLater(string str) //转换为后缀表达式
{
string ret;
stack<char>sign;
int len = 0;
for (int i = 0; i < str.size(); i++)
{
if (isdigit(str[i]))
{
ret.push_back(str[i]);
len++;
}
else
{
if (ret[len - 1] != ' ')
{
ret.push_back(' ');
len++;
}
if (sign.empty() || str[i]=='(')
{
sign.push(str[i]);
}
else if (str[i] == ')')
{
while (sign.top() != '(')
{
ret.push_back(sign.top());
len++;
sign.pop();
}
sign.pop();
}
else
{
if (str[i] == '+' || str[i] == '-')
{
while (sign.top() != '(' && !sign.empty())
{
ret.push_back(sign.top());
len++;
sign.pop();
}
sign.push(str[i]);
}
else
{
sign.push(str[i]);
}
}
}
}
while (!sign.empty())
{
ret.push_back(sign.top());
len++;
sign.pop();
}
return ret;
}
int Caculate(string str)
{
double a, b;
int i = 0;
int len = str.size();
stack<double>num;
while (i < len)
{
if (isdigit(str[i]))
{
double sum = 0;
while (isdigit(str[i]))
{
double temp = (double)(str[i] - '0');
sum = sum * 10 + temp;
i++;
}
num.push(sum);
}
else if (str[i] == ' ')
{
i++;
continue;
}
else
{
b = num.top();
num.pop();
a = num.top();
num.pop();
if (str[i] == '+')
{
num.push(a + b);
}
else if (str[i] == '-')
{
num.push(a - b);
}
else if (str[i] == '*')
{
num.push(a * b);
}
else
{
num.push(a / b);
}
i++;
}
}
return num.top();
}
int main()
{
string str;
string strtemp;
cout << "请输入算式:" << endl;
cin >> str;
strtemp = TurnLater(str);
cout << "后缀表达式:" << endl;
cout << strtemp << endl;
cout << "算式结果为:" << endl;
double ret = Caculate(strtemp);
cout << ret << endl;
system("pause");
return 0;
}
后缀表达式
最新推荐文章于 2021-07-30 19:23:45 发布