我正在尝试开发一个程序,该程序从用户输入中获取数学表达式(2+2、3*1、4-2、2+3*1 等),我已经让它可以使用简单,一次操作,但还不能同时进行多个操作。有人建议我对字符串进行标记和评估,虽然我设法对它进行标记,但我正在阅读的手册没有解释如何评估(我正在尝试自己学习,没有给我做作业),而谷歌还没有解释如何评估非常有帮助。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
char conta[255];
int n1;
int n2;
int result;
char op;
printf("Introduza uma expressao numerica: ");
gets(conta);
sscanf(conta, "%d %c %d", &n1, &op, &n2);
char* token = strtok(conta, "+-*/");
while (token) {
printf("token: %s\n", token);
token = strtok(NULL, "+-*/");
}
if(op == '+'){
printf("%d", result=n1+n2);
}else if(op == '-'){
printf("%d", result=n1-n2);
}else if(op == '*'){
printf("%d", result=n1*n2);
}else if(op == '/'){
printf("%d", result=n1/n2);
}
}
这是我到目前为止所拥有的代码。任何帮助将不胜感激,谢谢。
最佳答案
您必须为表达式实现一个解析器,分析输入并评估方程的顺序,以便例如2+2*2 是 6 而不是 8。
我们来看看 2+2*2 的例子。想象一下数学运算可以用两种方式表达,例如 a*b
是 *(a,b)
和 c+d
是 +(c,d)
。因此,如果您有表达式 a+b*c
,它将被计算为 +(a,*(b,c))
。这是实现这一目标的一种方法。
您还可以在 LR parser wiki page 上找到很好的解释。 (一种自下而上的解析器)。
关于c - 如何评估C中的token?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41199192/