我正在尝试编写一个从用户输入(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);
}
}这就是我到目前为止所拥有的代码。非常感谢ANy的帮助,谢谢。
发布于 2016-12-17 22:01:28
你必须为表达式实现一个解析器,分析输入并计算等式的顺序,例如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 (一种自下而上的解析器)上找到一个很好的解释。
https://stackoverflow.com/questions/41199192
复制相似问题