将字符串计算为 C++ 中的表达式
Calculation of the string as expression in C++
在我的项目中,我需要将用户的表达式输入作为字符串,然后显示表达式的结果。我接受以下输入
char address[100] = {NULL};
fgets(address, 100, stdin); //take the expression as input here
假设用户将表达式编写为
address = " 1+5+9" .
我需要做的是显示表达式的结果。我可以通过分隔每个数字然后进行计算来做到这一点。但我只是想知道有没有更好的方法可以做到这一点?
听起来
你正在寻找一个C++,相当于JavaScript中的eval
。 不幸的是,C++没有。 手动分析表达式是你能做的最好的事情。
如果你有访问C++编程语言一书,第6章将介绍如何编写一个简单的计算器程序,解决你遇到的相同问题。
有
几种方法可以做到这一点,其中最流行的方法之一,在我个人看来,最优雅的方式是使用递归下降解析器。网络上有很多有用的指南可以做到这一点。一个简单的谷歌搜索引导我:
- 创建递归下降分析器
- 递归下降分析
- C++中的递归下降解析器
- 按递归降序解析表达式(包含一些有用的伪代码)
还有这些堆栈溢出帖子:
- 递归下降解析器问题
- 递归下降解析器
简单地分隔数字然后进行计算的问题在于当您允许乘法并且通常需要考虑运算符的顺序时会出现的问题。
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 使用正则表达式regex_search在字符串中查找字符串
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 概念中的cv限定符需要表达式参数列表
- 为什么constexpr的性能比正常表达式差
- 对于结构,表达式必须是可修改的ivalue
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 将fold表达式与std::一起用于两个元组
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 标记 '","' 之前的预期主表达式
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 带有用户定义类的c++折叠表达式
- 即使使用调试编译标志,表达式也是"optimized out"
- holeMenuProgram.cpp:38:1 错误:'}'令牌之前的预期主表达式
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 这 4 个 lambda 表达式之间有什么区别?