题目:L2-053 算式拆解 - 团体程序设计天梯赛-练习集
题意:给定一个算术式,”每个操作及其对应的两个操作对象都被一对圆括号 ()
括住“ 然后按优先级找到优先级最高的括号内部 将内部计算式输出 然后”前面步骤中获得的结果不必输出 “前面步骤中获得的结果不必输出。例如在样例中,计算了 2+3
以后,下一步应该计算 5*4
,但 5
是前一步的结果,不必输出,所以第二行只输出 *4
即可。” 样例:(((2+3)*4)-(5/(6*7)))
思路:通过两个指针 找到第一个右括号 和该右括号匹配的最近的左括号 那么现在所找到的两括号内的算术式一定是优先级最高的 将其输出 然后使用replace删除包含括号的语句( replace(l,r-l+1,"" )最后就会按优先级依次输出所以算术式,所以用双指针来匹配括号即可 代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
while(s!="")
{
int l = 0,r=0;
while(s[r]!=')') r++;
l = r;
while(s[l]!='(') l--;
for(int i=l+1;i<r;i++) cout<<s[i];
cout<<endl;
s.replace(l,r-l+1,"");
}
return 0;
}