题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3930
比较简单的模拟题
1 #include <bits/stdc++.h> 2 using namespace std; 3 int T; 4 string s; 5 vector <string> v; 6 int main() 7 { 8 scanf("%d", &T); 9 getchar(); 10 while(T--) 11 { 12 getline(cin, s); 13 v.clear(); 14 15 for(int i = 0; i < s.size(); i++) 16 { 17 if(s[i] == ')' || s[i] == '(') continue; 18 else if(s[i] == ' ') continue; 19 else if(s[i] == '*' || s[i] == '/' || s[i] == '+' 20 || s[i] == '-') continue; 21 22 if(s[i] == 'd') 23 { 24 string sz = ""; 25 int j; 26 for(j = i+1; j < s.size(); j++) 27 { 28 if(!isdigit(s[j])) break; 29 else sz += s[j]; 30 } 31 i = j-1; 32 string ans = "[d"; 33 ans += sz; ans += "]"; 34 v.push_back(ans); 35 } 36 else if(isdigit(s[i])) 37 { 38 bool isdig = true; 39 int j; 40 41 string temp =""; temp += s[i]; 42 for(j = i+1; j < s.size(); j++) 43 { 44 if(s[j] == ')' || s[j] == '(') break; 45 else if(s[j] == ' ') break; 46 else if(s[j] == '*' || s[j] == '/' 47 || s[j] == '+' || s[j] == '-') break; 48 49 else if(s[j] == 'd') 50 { 51 isdig = false; 52 temp += s[j]; 53 } 54 else if(isdigit(s[j])) 55 { 56 temp += s[j]; 57 } 58 } 59 60 i = j-1; 61 62 if(isdig == true) v.push_back(temp); 63 64 else if(isdig == false) 65 { 66 long long cnt = 0; 67 long long mul = 1; 68 string sz = ""; 69 string last = "[d"; 70 int posd; 71 for(int j = 0; j < temp.size(); j++) 72 { 73 if(temp[j] == 'd') 74 { 75 posd = j; break; 76 } 77 else sz += temp[j]; 78 } 79 80 for(int j = sz.size()-1; j >= 0; j--) 81 { 82 cnt += (sz[j]-'0')*mul; 83 mul *= 10; 84 } 85 86 for(int j = posd+1; j < temp.size(); j++) 87 { 88 last += temp[j]; 89 } 90 last += ']'; 91 92 string ans; 93 /* if(cnt == 0) 94 { 95 v.push_back(""); 96 continue; 97 }*/ 98 if(cnt > 1) ans = "("; 99 else ans = ""; 100 for(int j = 1; j <= cnt; j++) 101 { 102 if(j == 1) ans += last; 103 else 104 { 105 ans += " + "; ans += last; 106 } 107 } 108 if(cnt > 1) ans += ")"; 109 v.push_back(ans); 110 } 111 } 112 } 113 /*cout<<"Case "<<T<<endl; 114 for(int i = 0; i < v.size(); i++) 115 { 116 cout<<v[i]<<endl; 117 }*/ 118 119 int cnt = 0; 120 for(int i = 0; i < s.size(); i++) 121 { 122 if(s[i] == ')' || s[i] == '(') printf("%c", s[i]); 123 else if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') 124 { 125 printf(" %c ", s[i]); 126 } 127 else if(s[i] == ' ') continue; 128 else if(s[i] == 'd' || isdigit(s[i])) 129 { 130 cout<<v[cnt]; cnt++; 131 int j; 132 for(j = i+1; j < s.size(); j++) 133 { 134 if(s[j] == ')' || s[j] == '(' || s[j] == '+' || s[j] == '-' || s[j] == '*' || s[j] == '/') break; 135 } 136 i = j-1; 137 } 138 } 139 printf(" = [Result] "); 140 } 141 return 0; 142 }