0

我需要编写一个代码,该代码接受一个字符串输入并将其或类似的东西转换为一个有效的一元方程,并加法以验证它是否有效。我很困惑,谁能指出我理解这个的方向?一个例子是: 111+1111=11111+1+1是有效的陈述3+4=5+1+1。我的另一个问题是如何使用堆栈进行一元操作。

4

2 回答 2

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、+、= 以外的字符?

我猜这是家庭作业。而且我猜您应该逐个字符地阅读并 push() 堆栈上的每个字符。然后你必须在遇到某些条件时弹出()堆栈。我不会为你做这个......

于 2013-04-19T20:48:01.660 回答
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 的数量并进行比较。肯定有更好的方法可以做到这一点,但是通过这个例子很容易看出发生了什么。

于 2013-04-19T21:17:48.203 回答