我需要编写一个代码,该代码接受一个字符串输入并将其转换为有效的一元等式,并验证它是否有效。我很困惑,有人能指出我理解这个方向吗?
一个例子是:
111+1111=11111+1+1
是有效的语句3+4=5+1+1
。
我的另一个问题是如何使用堆栈来进行一元操作。
答案 0 :(得分:1)
如果您只使用这种语言,那么您可以使用多种方法编写一个简单的解析器。您可以先拆分您的字符串
String[] parts = eqn.split("=");
然后拆分每个部分:
String[] left = parts[0].split("\\+");
String[] right = parts[1].split("\\+");
现在你可以简单地计算字符串的长度:
int leftside = 0;
for (String l : left) {
leftside += l.length;
}
依此类推右侧,看看它们是否相等。
还有很多其他方法可以解决这个问题。
基本上你必须写一个解析器。您可能希望使用逐个字符的扫描程序,或使用正则表达式或ANTLR等通用工具。这取决于您的最终目标以及是否可能发生变化。您是否可能拥有1,+,=以外的字符?
我的猜测是这是家庭作业。我想你应该逐个字符地读取并推送()堆栈中的每个字符。然后你必须在遇到某些条件时弹出()堆栈。我不打算为你做这个......
答案 1 :(得分:0)
另一种可能的解决方案。
String input = "111+1111=11111+1+1";
String[] parts = input.split("=");
Pattern pattern = Pattern.compile("1");
Matcher matcherLeft = pattern.matcher(parts[0]);
Matcher matcherRight = pattern.matcher(parts[1]);
int leftTotal = 0;
while (matcherLeft.find())
leftTotal++;
int rightTotal = 0;
while (matcherRight.find())
rightTotal++;
if(leftTotal == rightTotal)
System.out.println("Valid");
else
System.out.println("Invalid");
通过将字符串拆分到方程的左侧和右侧来开始。然后简单地计算每个部分中的1的数量并进行比较。肯定有更好的方法可以做到这一点,但是通过这个例子可以很容易地看出发生了什么。