c++ - 最有效和最简单的表达式评估 C++ 解决方案

标签 c++ pointers expression evaluation

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

输入:(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/

相关文章:

c# - 了解 C++ DLL 使用 union 映射到 C#

c#表达式和循环之美

php - "array_expression"在php中是什么意思?

c++ - 子类化后编辑控件无法获得焦点或设置文本

c# - 在 C++ 中模拟 C# Random()(相同的数字)

C++将文件中的文本放入字符

c++ - 三元运算符中的 Nullptr

c++ - 通过作为参数传递的指针更改 int 变量的值?

pointers - 在 Go 中传递指针与值

java - 如何设置图片表情始终存储正确的图片路径