后缀表达式的计算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
v.push_back(s[i]);
v.push_back(' ');
}
else if (s[i] == '(')
{
stk.push(s[i]);
}
else if (s[i] == ')')
{
while(stk.top() != '(')
{
v.push_back(stk.top());
v.push_back(' ');
break;
case '+':
case '-':
return 1;
break;
case '*':
case '/':
return 2;
break;
default:
return -1;
break;
}
}
bool IsOperator(char op)//是否为运算符
{
if (op == '+' || op == '-' || op == '*' || op == '/')
return false;
res = stk.top(); stk.pop();
if (!stk.empty())
return false;
return true;
}
int main()
{
char s[100];
int res;
vector<char> v;
gets(s);
inTOpost(s,v);
{
num = num * 10 + s[i] - '0';
i++;wk.baidu.com
}
stk.push(num);
}
else
{
if (stk.empty())
return false;
int a = stk.top(); stk.pop();
if (stk.empty())
return false;
int b = stk.top(); stk.pop();
v.push_back(' ');
stk.pop();
}
}
stk.push(s[i]);
}
i++;
}
while(!stk.empty())
{
v.push_back(stk.top());
v.push_back(' ');
stk.pop();
}
}
bool compute(vector<char> s,int &res)//计算后缀表达式的值
{
return true;
}
return false;
}
void inTOpost(char s[],vector<char> &v)//转为后缀表达式
{
stack<char> stk;
int i = 0,len = strlen(s);
while(i < len)
{
if(s[i] >= '0' && s[i] <= '9')
switch(s[i])
{
case '+':
stk.push(b+a);
break;
case '-':
stk.push(b-a);
break;
case '*':
stk.push(b*a);
break;
case '/':
stk.push(b/a);
break;
}
i++;
}
}
if (stk.empty())
{
int i = 0,num;
int len = s.size();
stack<int> stk;
while(i < len)
{
if (s[i] == ' ')
{
i++;
continue;
}
if (s[i] >= '0' && s[i] <= '9')
{
num = 0;
while(s[i] >= '0' && s[i] <= '9')
stk.pop();
}
stk.pop();
}
else if (IsOperator(s[i]))
{
if (!stk.empty())
{
while(!stk.empty() && priority(s[i]) <= priority(stk.top()))
{
v.push_back(stk.top());
#include <iostream>
#include <stack>
#include <vector>
#include <string.h>
using namespace std;
int priority(char op)//运算符的优先级
{
switch(op)
{
case '(':
return 0;
输出
13
//后缀表达式
for (int i = 0;i < v.size();i++)
{
cout<<v[i];
}
cout<<endl;
if (compute(v,res))
{
cout<<res<<endl;
}
else
cout<<"输入错误"<<endl;
return 0;
}
测试数据
1+2*(3+4)-2*(3-2)
相关文档
最新文档