首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算C语言中的标记?

如何计算C语言中的标记?
EN

Stack Overflow用户
提问于 2016-12-17 21:41:36
回答 1查看 123关注 0票数 0

我正在尝试编写一个从用户输入(2+2、3*1、4-2、2+3*1等)获取数学表达式的程序。我已经让它在一个简单的操作下工作,但它还不能处理多个操作。有人建议我对字符串进行标记化和评估,虽然我设法对其进行了标记化,但我正在阅读的手册并没有解释如何评估(我正在尝试自己学习,没有作业给我),谷歌也没有超级大的帮助。

代码语言:javascript
复制
#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的帮助,谢谢。

EN

回答 1

Stack Overflow用户

发布于 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 (一种自下而上的解析器)上找到一个很好的解释。

如果维基页面还不够,只需查找top-downbottom-up解析器即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41199192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档