以前写的,现在又被我捞出来了。。。。
#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;
}
