Logic 计算器逻辑

Logic 计算器逻辑,logic,calculator,Logic,Calculator,我正在制作一个计算器应用程序来挑战自己,我需要一只手来规划我的逻辑。问题是,方程是在一个字符串中,我需要以某种方式计算出我正在计算的运算符左右两侧的数字(有一个运算顺序)。挑战在于还存在一元运算符,这意味着我不能简单地假设一个数字(在任意一侧)由另一个运算符分隔 我正在尝试评估类似于5+5^-2-3的东西。运算顺序意味着我首先关注^1,所以我需要得到5和-2,算出它们,然后将方程更新为5+25-3,然后依次计算其余的运算 有什么想法吗?谢谢。有一个著名的算法可以解决这个精确的问题。它被称为有一个

我正在制作一个计算器应用程序来挑战自己,我需要一只手来规划我的逻辑。问题是,方程是在一个字符串中,我需要以某种方式计算出我正在计算的运算符左右两侧的数字(有一个运算顺序)。挑战在于还存在一元运算符,这意味着我不能简单地假设一个数字(在任意一侧)由另一个运算符分隔

我正在尝试评估类似于5+5^-2-3的东西。运算顺序意味着我首先关注^1,所以我需要得到5和-2,算出它们,然后将方程更新为5+25-3,然后依次计算其余的运算


有什么想法吗?谢谢。

有一个著名的算法可以解决这个精确的问题。它被称为

有一个著名的算法来解决这个精确的问题。它被称为

有一个著名的算法来解决这个精确的问题。它被称为

有一个著名的算法来解决这个精确的问题。它被称为

,您可以使用正则表达式来实现它。比如说

/(\d+)([\+\*])(\d+)/g
将匹配加号或乘法符号任一侧的任何一组数字。适用于

"47+65"
将给出3组,第一组为“47”,第二组为“+”,第三组为“65”

显然,你需要考虑所有可能的操作符。在更复杂的等式中,您需要获取所有匹配项并执行一些条件检查,以确定首先应用哪个组。您可能还需要考虑括号——也就是说,它们影响操作的顺序,并且包含在ReGEX

中。 编辑:为了好玩(而且由于投票结果是反对票),我创建了一个简单的示例(仅限加号、减号、乘法和除法运算符,数字和运算符之间没有空格)

编辑2:(允许在表达式和十进制数中使用多个运算符)

编辑3:(包括电源运算符-2^3=8)


编辑4:(考虑括号、空白、除零)

您可以使用正则表达式来实现此目的。比如说

/(\d+)([\+\*])(\d+)/g
将匹配加号或乘法符号任一侧的任何一组数字。适用于

"47+65"
将给出3组,第一组为“47”,第二组为“+”,第三组为“65”

显然,你需要考虑所有可能的操作符。在更复杂的等式中,您需要获取所有匹配项并执行一些条件检查,以确定首先应用哪个组。您可能还需要考虑括号——也就是说,它们影响操作的顺序,并且包含在ReGEX

中。 编辑:为了好玩(而且由于投票结果是反对票),我创建了一个简单的示例(仅限加号、减号、乘法和除法运算符,数字和运算符之间没有空格)

编辑2:(允许在表达式和十进制数中使用多个运算符)

编辑3:(包括电源运算符-2^3=8)


编辑4:(考虑括号、空白、除零)

您可以使用正则表达式来实现此目的。比如说

/(\d+)([\+\*])(\d+)/g
将匹配加号或乘法符号任一侧的任何一组数字。适用于

"47+65"
将给出3组,第一组为“47”,第二组为“+”,第三组为“65”

显然,你需要考虑所有可能的操作符。在更复杂的等式中,您需要获取所有匹配项并执行一些条件检查,以确定首先应用哪个组。您可能还需要考虑括号——也就是说,它们影响操作的顺序,并且包含在ReGEX

中。 编辑:为了好玩(而且由于投票结果是反对票),我创建了一个简单的示例(仅限加号、减号、乘法和除法运算符,数字和运算符之间没有空格)

编辑2:(允许在表达式和十进制数中使用多个运算符)

编辑3:(包括电源运算符-2^3=8)


编辑4:(考虑括号、空白、除零)

您可以使用正则表达式来实现此目的。比如说

/(\d+)([\+\*])(\d+)/g
将匹配加号或乘法符号任一侧的任何一组数字。适用于

"47+65"
将给出3组,第一组为“47”,第二组为“+”,第三组为“65”

显然,你需要考虑所有可能的操作符。在更复杂的等式中,您需要获取所有匹配项并执行一些条件检查,以确定首先应用哪个组。您可能还需要考虑括号——也就是说,它们影响操作的顺序,并且包含在ReGEX

中。 编辑:为了好玩(而且由于投票结果是反对票),我创建了一个简单的示例(仅限加号、减号、乘法和除法运算符,数字和运算符之间没有空格)

编辑2:(允许在表达式和十进制数中使用多个运算符)

编辑3:(包括电源运算符-2^3=8)


编辑4:(考虑括号、空格、除零)

首先想到的是树状结构。但是如果你想让它非常简单,根据语言的不同,我会创建一个数组

[[5,数字],+,运算符1],[5,数字],^,运算符3],-2,数字],-,运算符1],[3,数字]]

然后对每个操作员进行检查:

1) [[5,number],[+,operator1],[0.04,number],[-,operator1],[3,number]]
2) [[2.04,number]]

首先,我想到了树状结构。但是如果你想让它非常简单,根据语言的不同,我会创建一个数组

[[5,数字],+,运算符1],[5,数字],^,运算符3],-2,数字],-,运算符1],[3,数字]]

然后对每个操作员进行检查:

1) [[5,number],[+,operator1],[0.04,number],[-,operator1],[3,number]]
2) [[2.04,number]]

首先,我想到了树状结构。但是如果你想让它非常简单,根据语言的不同,我会创建一个数组

[[5,编号],+,运算符1],[5,编号],^,操作