PTA 3.11表达式转换

来源:互联网 发布:linux 自启动 编辑:程序博客网 时间:2024/06/05 10:12

有一个测试点过不了,希望大家指点。

/* * 1.cpp * *  Created on: 2017年8月23日 *      Author: Administrator */#include <bits/stdc++.h>using namespace std ;int main(){string s;cin>>s;stack<char> st;bool flag = false;for( int i = 0; i < s.length()&&s.length()<=20; i++){//负数情况if( i == 0 && s[i] == '-'){cout<<s[i];}//多位数及小数else if(isdigit(s[i])||s[i]=='.'){if(i>0&&(isdigit(s[i-1])||s[i-1]=='.')){cout<<s[i];}else if(!flag){flag = true;cout<<s[i];}else{cout<<" "<<s[i];}}//左括号else if(s[i]=='('){st.push(s[i]);}//右括号else if(s[i]==')'){while(st.top()!='('){if(!flag){flag = true;cout<<st.top();}else{cout<<" "<<st.top();}st.pop();}st.pop();}//+,— 号else if(s[i]=='+'||s[i]=='-'){//括号内有负数,直接输出if(s[i-1]=='('){if(s[i]=='-'){if(!flag){flag = true;cout<<s[i]<<s[i+1];i++;}else{cout<<" "<<s[i]<<s[i+1];i++;}}}//优先级问题else{if(!st.empty()){while(!st.empty()&&(st.top()=='*'||st.top()=='/')){if(!flag){flag = true;cout<<st.top();}else{cout<<" "<<st.top();}st.pop();}while(!st.empty()&&(st.top() == '+' || st.top() == '-')){if(!flag){flag = true;cout<<st.top();}else{cout<<" "<<st.top();}st.pop();}}st.push(s[i]);}}//*、/号else if(s[i]=='*'||s[i]=='/'){if(!st.empty()){while(!st.empty()&&(st.top()=='*'||st.top()=='/')){if(!flag){flag = true;cout<<st.top();}else{cout<<" "<<st.top();}st.pop();}}st.push(s[i]);}}while(!st.empty()){if(!flag){flag = true;cout<<st.top();}else{cout<<" "<<st.top();}st.pop();}return 0;}