含小括号的算术表达式求其后缀表达式
注意:算数表达式的操作数只能是一位数
分类时要考虑 栈顶和表达式此时的值两方面
#include <iostream>
#include <string.h>
#include <stdio.h>
#define maxnum 50
using namespace std;
//算术表达式求后缀表达式
//分类时要考虑 栈顶和表达式此时的值两方面
//若ch是运算符 要么直接入栈 要么先出栈在入栈
char Sta[maxnum];//栈
int top = -1;
int suffix(char* s,char *r)//求后缀表达式
{
/*2+3*5*(2+1)*/
int i=0,j=0;
while(s[i]!='\0')
{
if(s[i]<='9'&&s[i]>='0')
{
r[j] = s[i];
j++;
}
else if(s[i]=='(')
{
top++;
Sta[top] = s[i];
}
else if(s[i]==')')
{
for(top;Sta[top]!='(';top--)
{
r[j] = Sta[top];
j++;
}
top--;
}
else if(Sta[top] == '(')
{
top++;
Sta[top] = s[i];
}
else
{
if(top == -1)
{
top++;
Sta[top] = s[i];
}
else if(s[i] == '*'||s[i]=='/')
{
if(Sta[top] == '+'||Sta[top]=='-')
{
top++;
Sta[top] = s[i];
}
else//top为*或/ top-1为 ( 或 + 或 - 所以只需退一个
{
r[j] = Sta[top];
j++;
Sta[top] = s[i];
}
}
else
{
for(top;Sta[top]!='('&&top>-1;top--)
{
r[j] = Sta[top];
j++;
}
top++;
Sta[top] = s[i];
}
}
i++;
}
while(top>-1)//若栈非空 将栈内元素全出栈
{
r[j] = Sta[top];
top--;
j++;
}
cout<<Sta[0]<<" ";
return j;
}
int main()
{
/*1+2*(3-4)-5/6*/
char str[maxnum],res[maxnum];
int Count;
gets(str);
Count = suffix(str,res);
cout<<Count<<endl;
for(int i=0;i<Count;i++)
{
cout<<res[i];
}
return 0;
}
在这里插入代码片
博客持续更新一些编程题,有错误或不解欢迎留言,我会在第二天回复,谢谢