【发布时间】:2016-02-11 20:00:28
【问题描述】:
我需要编写这样的方法:1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) ),然后输出这样的字符串结果( ( 1 + 2 ) * ( ( 3 - 4 ) * ( 5 - 6 ) ) ).
对不起,我的英语不是我的母语。
我在这个问题中使用了堆栈。我知道如何检查表达式的正确性:
public boolean isParse(String str)
{
Stack<Character> s = new Stack<Character>();
for(int i = 0; i < str.length(); i++)
{
char c = str.charAt(i);
if(c == '{')
s.push(c);
else if(c == '[')
s.push(c);
else if(c == '(')
s.push(c);
else if(c == '}')
{ if(s.isEmpty())
return false;
else if(s.pop() == '{')
{
}
else
return false;
}
else if(c == ']')
{
if(s.isEmpty())
return false;
else if(s.pop() == '[')
{
}
else
return false;
}
else if(c == ')')
{
if(s.isEmpty())
return false;
else if(s.pop() == '(')
{
}
else
return false;
}
}
return s.isEmpty();
}
但我不知道如何修复这个表达式,如上例所示
【问题讨论】:
-
是否有从输入中导出结果的规则?
-
到目前为止你到底尝试了什么?
-
@JasonZ m 也是第一个想到的。那是一棵树。
-
如果你说你使用了
Stack,那么显示你的一些代码。 -
那么,您希望解析一个损坏的表达式并修复它?具体如何?该修复程序可能有许多与您提供的不同的解决方案...(例如
((1+2) * ((3 - 4) * (5-6))))
标签: java parsing stack brackets