// C++Exercise.cpp : 定义控制台应用程序的入口点。
//
#include<iostream>
#include<string>
#include<stack>
#include<map>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstdio>
#include<sstream>
using namespace std;
string s;
string data;
vector<int> index;
void print(int cur){
cout << "op(";
cout << index[cur] << ',';
if (cur - 1 < 0){
cout << s[0];
}
else{
print(cur-1);
}
cout << ")";
}
string getRes(int cur,string s){
int exp = 2, mul = 1, add = 0;
vector<int> pos[3];
for (int i = 0; i < 3; i++) pos[i].push_back(-1);
int i;
for ( i = 0; i < s.size(); i++){
if (s[i] == '+'){
pos[add].push_back(i);
}
else if (s[i] == '*'){
pos[mul].push_back(i);
}
else if (s[i] == '^'){
pos[exp].push_back(i);
}
else if(s[i]=='('){
int amount = 1;
while (amount){
i++;
if (s[i] == '(') amount++;
else if (s[i] == ')') amount--;
}
}
}
string sub;
for (int i = 0; i < 3; i++) pos[i].push_back(s.size());
for (i = 0; i < 3; i++){
if (pos[i].size() !=2) break;
}
if (i < 3){
sub = s.substr(pos[i][index[cur]-1]+1,pos[i][index[cur]]-pos[i][index[cur]-1]-1);
}
else if (s[0]=='('){
sub = s.substr(1,s.size()-2);
}
else{
sub = s;
}
if (cur == index.size() - 1) return sub;
else return getRes(cur+1,sub);
}
int main(){
int Case = 0;
while (cin >> s){
Case++;
if (s == "*") break;
data = s.substr(3);
int n;
cin >> n;
string d;
getline(cin, d);
if (Case > 1) cout << endl;
cout << "Expression " << s[0] << ":" << endl;
for (int i = 0; i < n; i++){
string temp;
getline(cin, temp);
stringstream temp2(temp);
int t;
index.clear();
while (temp2 >> t){
index.push_back(t);
}
print(index.size() - 1);
cout << "=" << getRes(0, data) << endl;
}
}
return 0;
}
zoj 1014
最新推荐文章于 2023-10-07 14:47:51 发布