给定一个算术表达式字符串,找到表达式的十进制值
Given a string of arithmetic expression, find the decimal value of the expression.
>面试问题。
给定一个算术表达式字符串,找到表达式的十进制值。
例如 . 给定
30*(5+10) is a string, its value is 450.
我的想法:
逐个解析每个符号,并将字符串重建为具有运算符优先级的表达式。但是,它效率不高,它是O(n^2(甚至更糟。
更好的主意 ?
谢谢
您可以使用 O(n( 时间内的堆栈将表达式转换为后缀。
然后计算 O(n( 时间内带有堆栈的后缀表达式。
在表达式计算期间,需要转换为 Postfix 才能确定运算符的优先级。
使用堆栈 http://www.cs.wcupa.edu/~rkline/DS/deque-stack-algorithms.html 参考算术表达式的计算
使用有限状态自动机解析和标记字符串:
整数 -> 整数令牌
运算符 ->运算符令牌
左括号 ->状态 - 新表达式
右括号 -> 状态 - 关闭表达式
这样,您就可以构建树并通过展平树 bottum 来执行。
用交易条款描述操作:构建或查找算术表达式的解析器,解析字符串,评估抽象语法树 (AST( 并返回结果。由于算术表达式是上下文无关的语言,并且在LL(1)
中,这在O(n)
中是可能的。使用Boost.Spirit或yacc
构建解析器很便宜。
在表达式之前将字符串"print "
前面加上一对额外的括号,在末尾加上一个分号并将其传递给perl -e,即在C中:
system("perl -e 'print (30*(5+10));'");
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- 如何在C++中使用正则表达式"|"后选择字符串?
- 生成 constexpr 字符串表,不能产生常量表达式
- 如何在 c++11 中使用正则表达式找到确切的子字符串?
- 如何编写将验证以下字符串的正则表达式?
- C++带有捕获组的正则表达式字符串文本
- 如何使用正则表达式从字符串中提取值
- 计算表达式字符串由 std::map 中的键组成
- 在C++中从后缀表达式字符串打印单个操作
- 标记表达式字符串
- C++:表达式:字符串下标超出范围
- C++ 错误:第 1440 行 表达式:字符串下标超出范围
- 给定一个算术表达式字符串,找到表达式的十进制值
- 错误:表达式:字符串下标超出范围
- 调试断言失败:表达式:字符串下标超出范围
- 处理正则表达式字符串时编译崩溃(内存泄漏)
- c++表达式:字符串下标超出范围
- 正则表达式字符串过滤 - 如何允许“-”符号
- 表达式:字符串下标超出范围