C++ 最有效&;表达式计算的最简单解决方案c++;

C++ 最有效&;表达式计算的最简单解决方案c++;,c++,pointers,expression,evaluation,C++,Pointers,Expression,Evaluation,许多程序需要计算表达式,如: 输入:(T(TF))-->输出:false(T为true,F为false) 或 输入(a(b c 2)3)$-->输出:ABCBC 换句话说,如何处理包含大括号的表达式 我过去常常推到堆栈上,直到到达“')。 然后,弹出直到我到达“(”,依此类推。 但这需要很长的执行时间和错误的代码 如果我试图利用@Henrik代码来解算术表达式,我最终会得到一个错误的答案 #include <iostream> using namespace std; const c

许多程序需要计算表达式,如:

输入:(T(TF))-->输出:false(T为true,F为false)

输入(a(b c 2)3)$-->输出:ABCBC

换句话说,如何处理包含大括号的表达式

我过去常常推到堆栈上,直到到达“')。 然后,弹出直到我到达“(”,依此类推。 但这需要很长的执行时间和错误的代码

如果我试图利用@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;
}
#包括
使用名称空间std;
const char*expressionToParse=“(T(TT))”;
char peek()
{
return*expressionToParse;
}
char get()
{
return*expressionToParse++;
}
布尔表达式();
布尔数()
{
bool result=get()-“0”;
//即使我删除-'0'

cout这是后缀形式的表达式。计算后缀表达式的最简单方法是使用堆栈。搜索“后缀表达式计算”谢谢你,我会搜索它来得到这个想法,但是它是在C++ 3.4.2?HMM上工作的,在反思中,也许它不是推荐的最好的东西。它不是最容易使用的好方法,我正在寻找中缀表达式的评估,如果我是正确的,那么需要转换时间到后缀,然后E。无论如何,谢谢。
(a(b c 2)3)$
->这当然是后缀,字符是操作数,数字是运算符。不需要转换,并且使用堆栈计算后缀表达式是世界上最简单的方法之一。
(T(TF))
->这对我来说是不明确的,我在这个表达式中看不到任何运算符,所以我甚至无法确定这个表达式的类型。这对我来说是一个谜,你如何从中得到
F
…谢谢你的解释,对于(T(TF)),我认为运算符在两个操作数之间是隐式的(and)