以前写的,现在又被我捞出来了。。。。
#include<stdio.h> #include<queue> using namespace std; const int MAXN=100010; #define alx)x>='a'&&x<='z') char m[MAXN]; queue<char>dl; int stnum,alnum; bool sup){ char a,b; while!dl.empty)){ a=dl.front); dl.pop); ifa==')'){ stnum--; return true; } else ifa=='!'){ ifdl.empty))return false; b=dl.front); dl.pop); } else ifa==''){ stnum++; if!sup))return false; } else if!ala))return false; ifdl.empty))return true; b=dl.front); dl.pop); ifb==')'){ stnum--; return true; } ifb=='+'||b=='*'||b=='-'||b=='='){ ifdl.empty))return false; } else return false; } } int main){ puts"由于制表符打印着麻烦,这里用!,+,*,-,=分别代替┒,∧,∨,→,那个双箭头没找到。。。"); whilegetsm)){ while!dl.empty))dl.pop); stnum=0;alnum=0; forint i=0;m[i];i++){ ifm[i]==' '||m[i]==' ')continue; ifalm[i]))alnum++; dl.pushm[i]); } ifdl.empty)||!alnum)puts"不是合式公式");//判断表达式为空时不是合式公式; else if!sup)||stnum!=0)puts"不是合式公式"); else puts"是合式公式"); } return 0; }