后缀表达式用于表达式计算很方便,所以写了段代码把中缀表达式转成后缀表达式。
这段代码只能一边转换一边输出,要想用还需要修改。
现在最重要的问题:不能正常处理右结合的操作符,如果有两个以上的右结合操作符连续,输出就不正确。解决方法已经想到了,明儿早上再说喽~
有错误欢迎指出,共同进步!
- //获得运算符的优先级
- int getoppri(const char op)
- {
- switch(op)
- {
- case '/0' :
- return 0;
- case '(' :
- return 1;
- case ')' :
- return 2;
- case '+' :
- case '-' :
- return 3;
- case '*' :
- case '/' :
- case '%' :
- return 4;
- case '^' :
- return 5;
- default:
- return 0;
- }
- }
- int main()
- {
- char test[]="2+3*4^5*6+7";
- char* start=test;
- char* end=start+strlen(test);
- stack<char> opstack;
- opstack.push('/0');
- while(start!=end){
- if(isdigit(*start)){
- cout<<*start;
- }else if(*start=='('){
- opstack.push(*start);
- }else if(*start==')'){
- while(opstack.top()!='('){
- cout<<opstack.top();
- opstack.pop();
- }
- opstack.pop();
- }else{
- while(getoppri(opstack.top())>=getoppri(*start)){
- cout<<opstack.top();
- opstack.pop();
- }
- opstack.push(*start);
- }
- start++;
- }
- while(opstack.size()!=0){
- cout<<opstack.top();
- opstack.pop();
- }
- cout<<endl;
- int i;
- cin>>i;
- return 0;
- }