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