求解数组中的方程

Ole*_*sov 1 c++ arrays

我试图找出如何解决已存储在数组中的方程式.我需要一些关于如何克服这种问题的指导.这是我的条件

  • 我有一个数组int X [30];
  • 在那里我存储了我想要的等式:5 + 6*20/4
  • 同样,我无法存储操作数(+/ - *)所以我使用了不同的标识符,如(-1 -2 -3 -4),因为在等式中不应该有负值.

任何帮助将不胜感激

谢谢

Ash*_*win 8

如果要在C中完成,那么我建议使用prefixpostfix评估技术.有一些技术可以将给定的中缀表达式转换为前缀或后缀表示法.您可以在此处详细了解这些符号及其转换

使用这些,您的等式(5+6*20/4)转换为以下前缀表示法:

+ 5 * 6 / 20 4
Run Code Online (Sandbox Code Playgroud)

Prefix =运算符在任何操作数之前出现
Infix =运算符在操作数之间
Postfix =运算符在两个操作数之后

当它存储在两个堆栈,数字和操作时,这是你得到的:

int nums[] = {4, 20, 6, 5);
char opers[] = {'/', '*', '+'}
Run Code Online (Sandbox Code Playgroud)

注意顺序的逆转.

您现在可以使用简单的push pop技术和优先级来评估它:

  1. 从操作员堆栈弹出操作员
  2. 从操作数堆栈弹出两个操作数并将操作应用于它们
  3. 将结果推回堆栈

继续上面的操作直到你在操作数堆栈上留下一个结果(并且操作符堆栈为空)

试运行以上:

Iteration 1: 
Run Code Online (Sandbox Code Playgroud)

应用于'/'4和20给5,将其推回操作数堆栈.

nums = {5, 6, 5};
opers = {'*', '+'};
Run Code Online (Sandbox Code Playgroud)

-

Iteration 2:
Run Code Online (Sandbox Code Playgroud)

应用于'*'5和6给30,将其推回操作数堆栈

nums = {30, 5};
opers = {'+'};
Run Code Online (Sandbox Code Playgroud)

-

Iteration 3:
Run Code Online (Sandbox Code Playgroud)

适用'+'于30和5给35,将其推回操作数堆栈

现在,操作符堆栈为空,操作数堆栈有一个值:35,这是你的答案.