在字符串中插入括号

时间:2015-04-16 07:19:22

标签: c++ string math expression

我有一个通过字符串给出的数学表达式。例如: -4 ^ 2 + 3 *( - 23 ^ 2 + 5),我想结果是(0-4)^ 2 + 3 *((0-23)^ 2 + 5) 我需要编写一个函数来为完整的字符串做那种事情。 有人可以帮忙吗? 提前谢谢

1 个答案:

答案 0 :(得分:1)

我建议你(1)为你的表达式创建一个解析器,然后(2)将字符串解析成抽象语法树(AST),然后(3)根据你的需要打印AST。

(1):手动编写解析器很快就会变得混乱,所以我建议你用一些不错的BNF格式编写你的语法并使用解析器生成器。例如,请参阅此问题:C++ parser generator

(2):解析表达式应该归结为在生成的解析器上调用parse方法。

(3):要打印AST,您可以编写遍历树的递归函数,或者使用访问者,或者将漂亮的打印方法直接放在不同的节点上,并依赖于多态。