求实现:将数学公式字符串转换为可遍历的对象树函数
需求说明
我需要开发一个函数,该函数接收包含+、-、*、/运算的数学公式字符串作为参数,返回一个易于遍历的结构化对象,将公式的各个组成部分按规则拆分存储。
输入特征
- 输入为包含数学公式的字符串
- 公式不含
=,并非方程 - 仅包含整数,无浮点数
- 整数可为正数或负数
- 无x、y、z等变量
- 可包含括号
测试用例
示例1:基础运算(单一运算符)
| 序号 | 输入(字符串) | 输出(对象) |
|---|---|---|
| 1 | 1 | { values: [1], operation: null } |
| 2 | 1+1 | { values: [1,1], operation: "+" } |
| 3 | 1+2+3 | { values: [1,2,3], operation: "+" } |
| 4 | 3-2-1 | { values: [3,2,1], operation: "-" } |
| 5 | 10*80 | { values: [10,80], operation: "*" } |
| 6 | 100/10 | { values: [100,10], operation: "/" } |
示例2:含两种运算符的公式
+ 和 - 示例
示例1
输入:1+1-1
输出:
{ values: [ { values: [1, 1], operation: "+", }, 1, ], operation: "-", };
示例2
输入:3+2-1+5
输出:
{ values: [ { values: [ { values: [3, 2], operation: "+", }, 1, ], operation: "-", }, 5, ], operation: "+", };
示例3
输入:3+2-1+5+10+7
输出:
{ values: [ { values: [ { values: [3, 2], operation: "+", }, 1, ], operation: "-", }, 5, 10, 7 ], operation: "+", };
+ 和 / 示例
示例4
输入:1+2/3
输出:
{ values: [ 1, { values: [2, 3], operation: "/", }, ], operation: "+", };
示例5
输入:2/3+1
输出:
{ values: [ { values: [2, 3], operation: "/", }, 1, ], operation: "+", };
示例6
输入:1/2+3/4+5/6
输出:
{ values: [ { values: [1, 2], operation: "/", }, { values: [3, 4], operation: "/", }, { values: [5, 6], operation: "/", }, ], operation: "+", };
示例7
输入:1/2/3/4/5+6+7+8/9+10/11
输出:
{ values: [ { values: [1, 2, 3, 4, 5], operation: "/", }, 6, 7, { values: [8, 9], operation: "/", }, { values: [10, 11], operation: "/", }, ], operation: "+", };
/ 和 - 示例
示例8
输入:1-2/3
输出:
{ values: [ 1, { values: [2, 3], operation: "/", }, ], operation: "-", };
/ 和 * 示例
示例9
输入:10/2*5
输出:
{ values: [ { values: [10, 2], operation: "/", }, 5, ], operation: "*", };
示例3:含四种运算符的公式
示例1
输入:10/2*5+1-1*5/3+2*4
输出:
{ values: [ { values: [ { values: [ { values: [ { values: [10, 2], operation: "/", }, 5, ], operation: "*", }, 1, ], operation: "+", }, { values: [ { values: [1, 5], operation: "*", }, 3, ], operation: "/", }, ], operation: "-", }, { values: [2, 4], operation: "*", }, ], operation: "+", };
示例4:含括号的公式
示例1
输入:1+2*(3+2)
输出:
{ values: [ 1, { values: [ 2, { values: [3, 2], operation: "+", }, ], operation: "*", }, ], operation: "+", };
示例2
输入:(1+2*3)*2
输出:
{ values: [ { values: [ 1, { values: [2, 3], operation: "*", }, ], operation: "+", }, 2, ], operation: "*", };
示例3
输入:(1/1/10)+1/30+1/50
输出:
{ values: [ { values: [1, 1, 10], operation: "/", }, { values: [1, 30], operation: "/", }, { values: [1, 50], operation: "/", }, ], operation: "+", };
其他场景
示例1
输入:-(1+2)
输出:
{ values: [ { values: [1, 2], operation: "+", }, ], operation: "-", };
...
内容的提问来源于stack exchange,提问作者user19485937
相关产品推荐
相关产品推荐

