#define _NOTHREADS 1 #include #include #include #include #include #include int pri(char c) { if (c=='+' || c=='-') return 1; else if(c=='*' || c=='/') return 2; else return 0; } int main() { int n; cin >> n; char buf[300]; gets(buf); for (int ca=1; ca<=n; ca++) { gets(buf); int len=strlen(buf); stack v; list l; vector li; for (char* c=buf; *c; c++) { switch (*c) { case '(': v.push(*c); break; case ')': while (v.top() != '(') { l.push_back(v.top()); li.push_back(0); v.pop(); } v.pop(); break; case '+': case '-': case '*': case '/': while (!v.empty() && pri(v.top()) && pri(v.top()) >= pri(*c)) { l.push_back(v.top()); li.push_back(0); v.pop(); } v.push(*c); break; default: l.push_back(*c); li.push_back(c); break; } } while (!v.empty()) { l.push_back(v.top()); li.push_back(0); v.pop(); } /* for (list::iterator i=l.begin(); i!=l.end(); i++) cout << *i; */ /////////////////////////////////////////////////// stack kezd, vege; stack vc; // string tmp; for (int i=0; i::iterator i=l.begin(); i!=l.end(); i++,ipos++) { char *ujkezd, *ujvege, *zarokezd, *zarovege; switch (*i) { case '+': kezd.pop(); ujkezd = kezd.top(); kezd.pop(); ujvege = vege.top(); vege.pop(); vege.pop(); kezd.push(ujkezd); vege.push(ujvege); vc.pop(); vc.pop(); vc.push('+'); break; case '-': zarokezd = kezd.top(); kezd.pop(); ujkezd = kezd.top(); kezd.pop(); ujvege = vege.top(); vege.pop(); vege.pop(); if(pri(vc.top())==1) { *(ujvege+1) = ')'; ujvege++; *(zarokezd-1) = '('; } kezd.push(ujkezd); vege.push(ujvege); vc.pop(); vc.pop(); vc.push('-'); break; case '*': zarokezd = kezd.top(); kezd.pop(); ujkezd = kezd.top(); kezd.pop(); ujvege = vege.top(); vege.pop(); zarovege = vege.top(); vege.pop(); if(pri(vc.top())==1) { *(ujvege+1) = ')'; ujvege++; *(zarokezd-1) = '('; } vc.pop(); if(pri(vc.top())==1) { *(zarovege+1) = ')'; *(ujkezd-1) = '('; ujkezd--; } kezd.push(ujkezd); vege.push(ujvege); vc.pop(); vc.push('*'); break; case '/': zarokezd = kezd.top(); kezd.pop(); ujkezd = kezd.top(); kezd.pop(); ujvege = vege.top(); vege.pop(); zarovege = vege.top(); vege.pop(); if(pri(vc.top())!=0) { *(ujvege+1) = ')'; ujvege++; *(zarokezd-1) = '('; } vc.pop(); if(pri(vc.top())==1) { *(zarovege+1) = ')'; *(ujkezd-1) = '('; ujkezd--; } kezd.push(ujkezd); vege.push(ujvege); vc.pop(); vc.push('/'); break; default: kezd.push(li[ipos]); vege.push(li[ipos]); vc.push('x'); break; } } for (char* c=buf; *c; c++) { if (*c!=' ') cout << (*c); } cout << endl; } return 0; }