标签:
以前写的,现在又被我捞出来了。。。。
#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;
}
标签:
原文地址:http://www.cnblogs.com/handsomecui/p/5031277.html