算法思想:定义栈,从右向左扫描字符串,遇到运算符,则栈顶和次栈顶的元素出栈,计算结果入栈,重复上面的步骤,知道字符串扫描完毕。
#include <iostream>
#include <cstring>
#define MAXSIZE 256
using namespace std;
typedef struct stack
{
int top;
char stack[MAXSIZE];
}Stack;
void initStack(Stack *s)
{
s->top=0;
}
int getPrefixValue(Stack *s1,char s[])
{
int i=strlen(s);
int temp1,temp2;
int sum=0;
char d;
if(strlen(s)==0)
{
cout<<"中缀式不能为空."<<endl;
return -1;
}
while(i>=0)
{
if(s[i-1]>='0'&&s[i-1]<='9')
{
s1->top++;
s1->stack[s1->top]=s[i-1];
}
else
{
temp1=s1->stack[s1->top]-'0';
s1->top--;
temp2=s1->stack[s1->top]-'0';
s1->top--;
switch(s[i-1])
{
case '+':sum=temp1+temp2;break;
case '-':sum=temp1-temp2;break;
case '*':sum=temp1*temp2;break;
case '/':sum=temp1/temp2;break;
}
s1->top++;
s1->stack[s1->top]=sum+'0';
}
i--;
}
d=s1->stack[s1->top];
sum=d-'0';
return sum;
}
int main()
{
Stack s1;
char s[]="+-+7*345/62";
int sum=0;
initStack(&s1);
cout<<"前缀式为:"<<s<<endl;
sum=getPrefixValue(&s1,s);
cout<<"结果求和为:"<<sum<<endl;
return 0;
}
运行截图