由中缀表达式计算前缀表达式
算法思想:定义栈,从右向左扫描字符串,遇到运算符,则栈顶和次栈顶的元素出栈,计算结果入栈,重复上面的步骤,知道字符串扫描完毕。
#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; }
运行截图