递归之布尔表达式

《递归之布尔表达式》

与之前解决的四则表达式很相似,原因在于四则表达式也是递归的概念

《递归之布尔表达式》

#include <iostream>
#include <cstdio>
using namespace std;

char wholeExp[1500];//表示整个表达式的字符串
int ptr = 0;

bool exp();//读入一个表达式并返回其值
bool item();//读入一个项并返回其值
bool factor();//读入一个因子并返回其值
bool notExp();//将表达式取反的操作
bool exp()
{
    bool result = item();
    while(wholeExp[ptr]=='|')
    {
        ptr++;//注意先移动下标,才可以进行下面的计算
        result = result | item();
    }
    return result;
}
bool item()
{
    bool result = factor();
    while(wholeExp[ptr]=='&')
    {
        ptr++;
        result = result & factor();
    }
    return result;
}
bool factor()
{
    bool result;
    switch (wholeExp[ptr])
    {
    case 'F':
        ptr++;
        result=false;
        return result;
        break;
    case 'V':
        ptr++;
        result=true;
        return result;
        break;
    case '(':
        ptr++;
        result = exp();
        ptr++;
        return result;
        break;
    case '!':
        result = notExp();
        return result;
        break;
    }
}
bool notExp()
{
    ptr++;//注意这里的下标移动放在了函数体内
    bool result;
    switch (wholeExp[ptr])
    {
    case 'F':
        ptr++;
        result=true;
        return result;
        break;
    case 'V':
        ptr++;
        result=false;
        return result;
        break;
    case '(':
        ptr++;
        result = exp();
        ptr++;
        return !result;
        break;
    case '!':
        result = notExp();
        return !result;
        break;
    }
}
int main()
{
    char c;
    int i = 0;
    int n = EOF + 1;
    while(n != EOF)
    {
        n = scanf("%c",&c);
        if( n == EOF || c == '\n')
        {
            wholeExp[i] = '\0';
            if( i > 0)
            {
                ptr = 0;
                bool res = exp();
                if (res) { printf("V\n"); }
                else printf("F\n");
            }
            i = 0;
        }
        else if( c != ' ') wholeExp[i++] = c;
    }
    return 0;
}

    原文作者:xutian_curry
    原文地址: https://blog.csdn.net/xutian_curry/article/details/79870019
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞