首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有四个运算符的字符串表达式

具有四个运算符的字符串表达式
EN

Stack Overflow用户
提问于 2013-11-08 06:31:18
回答 4查看 71关注 0票数 0

这里是CS学生。我希望能够接受一个字符串,比如'2+2*3/2-2‘并计算它(= 3)。但我不确定如何组织代码以遵循正确的操作顺序。下面是乘法和除法的代码:

代码语言:javascript
复制
int r = 1;
    int n = 0;
    char op = '*';

    for (int i = 0; i < E.length(); i++)
        if (E.charAt(i)=='*'||E.charAt(i)=='/')
        {
            if (op == '*')
                r *= n;
            else
                r /= n;
            n = 0;
            op = E.charAt(i);
        }
        else
            n = n*10 + (E.charAt(i)-'0');

    if (op == '*')
        r *= n;
    else
        r /= n;

    return r;

感谢您的阅读!

EN

回答 4

Stack Overflow用户

发布于 2013-11-08 06:39:33

使用二叉树,其中每个节点是算术运算符,叶是值。

票数 2
EN

Stack Overflow用户

发布于 2013-11-08 06:40:37

这正是Interpreter pattern要做的事情。你的数学运算基本上就是一种语法--你所需要做的就是表示该语法。使用解释器模式解析数学语句,然后使用它输出的内容执行必要的操作。

票数 0
EN

Stack Overflow用户

发布于 2013-11-08 07:12:35

使用反向波兰语符号以“计算友好”的形式表示您的公式。你可以在这里阅读关于RPN的内容:http://en.wikipedia.org/wiki/Reverse_Polish_notation

2+2*3/2-2的RPN版本为2 2 3*2/2-+

然后算法是这样的:假设RPN版本中的每个符号都是符号数组中的一个元素。您从数组中获取元素,如果这是一个数字,则将其放入堆栈,如果这是一个运算符,则从堆栈中获取两个元素并执行操作。结果应该再次到达堆栈。重复此操作,直到到达数组的最后一个元素。最后,堆栈上只有一个元素,那就是你的答案。

让我们想象一下: iteration#符号堆栈content 1# 2 -> 2 2# 2 -> 2,2 3# 3 -> 3,2,2 4# * -> 6,2 5# 2 -> 2,6,2 6# / -> 3,2 7# 2 -> 2,3,2 8# - -> 1,2 9# + -> 3

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19848057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档