许多程序需要计算如下表达式:
输入:(T(TF)) --->输出:假(T为真,F为假)
或
输入 (a (b c 2) 3)$ ---> 输出:abcbcabcbcabcbc
换句话说,如何处理包含大括号的表达式?
我过去常常插入堆栈直到到达')'。 然后,弹出直到我到达'(',依此类推。 但这会花费很长的执行时间和错误的代码!
如果我试图利用@Henrik 的代码来解决算术表达式,我最终会得到一个错误的答案
#include <iostream>
using namespace std;
const char * expressionToParse = "(T(TT))";
char peek()
{
return *expressionToParse;
}
char get()
{
return *expressionToParse++;
}
bool expression();
bool number()
{
bool result = get() - '0';
//even if I remove -'0'
cout<<"number() result:"<<result<<endl;
while (peek() == 'T' || peek() == 'F')
{
if (peek()=='T' && get()=='T') {
result=true;
}
else{
result=false;
}
}
return result;
}
bool factor()
{
if (peek() == 'T' && peek() <= 'F')
return number();
else if (peek() == '(')
{
get(); // '('
bool result = expression();
get(); // ')'
return result;
}
return 0; // error
}
bool expression()
{
bool result = factor();
return result;
}
int main()
{
bool result = expression();
if(result){
cout<<"true";
}
else{
cout<<"false";
}
return 0;
}
提前致谢
最佳答案
这是一个后缀形式的表达式。评估后缀表达式的最简单方法可以使用堆栈来完成。搜索“后缀表达式求值”教程。
关于c++ - 最有效和最简单的表达式评估 C++ 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22203020/