布爾表達式求值
問題來自1:Boolean Expressions
主要思路為遞歸解決。
將一個表達式視為這幾種情況:1.若干個小的表達式通過&或|等符號連接而成;2.由一個大括弧包括的大表達式;3.由!+(表達式)4.單個因子,如V或!F。
將整體表達式不斷遞歸成為小的表達式,最後算出每個子表達式的邏輯值,從而向上返回得出最後的結果。
下面上代碼
#include<iostream>using namespace std;const int MAX = 101;#include<string.h>void prodeal(char str[]);bool expression_value(char str[],int left,int right);bool factor_value(char str[]);bool term_value(char str[]);bool evalute_value(char ch);bool ifsingle(char str[],int left,int right);int main(){ char ch[MAX]; int i = 0; bool result[30]; while (cin.getline(ch,MAX)) { //key=0; //cin.getline(ch,MAX); //getchar(); prodeal(ch); // cout<<ch<<endl; int length=strlen(ch); //cout<<"here"; //cout<<"RESULT="<<expression_value(ch,0,length-1)<<endl; printf("Expression %d: ",i+1); if(expression_value(ch,0,length-1)){ printf("V"); } else{ printf("F"); } printf("
"); i++; } return 0;}void prodeal(char str[])//eliminate the space in the string { int length = strlen(str); int i = 0; char str_1[MAX]; int j = 0; for (i = 0; i < length; i++) { if (str[i] != ) { str_1[j++] = str[i]; //cout<<str[i]<< ; } } str_1[j]=