判断表达式是否合法(推荐:*****)

Problem D: 表达式

Time Limit: 1 Sec Memory Limit: 4 MB
SUBMIT: 375 Solved: 31
[SUBMIT] [STATUS]

Description

设S是一个合法的表达式,E为一个数字字符序列,则合法的表达式可以表示为:E, +E, -E, (S),+(S),-(S),S+(S),S-(S),S*(S),S/(S) 等。(E可以是全‘0’的字符串)。
请注意+S, -S, S+S等不一定是合法的表达式,因为可能出现如“+-E”运算符相邻情况,另外出现“()”括号中没有元素的表达式也是不合法的。

Input

每行一个字符串,最长不超过1023个字符。可能有空行。

Output

如果表达式合法,输入“Yes”,否则输入“No”,然后换行。
如果表达式为空,则输出一个空行。

Sample Input

-1+2
+-1+2

+(-1+2)
()-23

Sample Output

Yes
No

Yes
No

/*
这道题,纠错时间主要在两个栈的存储顺序不一样!
*/
#include 
#include 
bool isOpe(char c)
{
	if(c=='+' || c=='-' || c=='*' || c=='/')
		return true;
	return false;
}
bool isDig(char c)
{
	if(c>='0' && c<='9')
		return true;
	return false;
}
bool check(char stack[],int top)
{
	bool ok=true;
	for(int i=0;i<=top;i++)
	{
		if(isOpe(stack[i]) && (i==top || (i
/*
解法借鉴与:CSGrandeur 
主要思想:
①去空格
②括号匹配,递归判断处理
③确定性有限自动生成器---*****
*/

#include 
#include 
const int nMax=1024+10;
char line[nMax];
int f[4][1<<7];
#define ORI 0
#define NUM 1
#define OPR 2
#define YKH 3
#define FAIL -1
void Delete_Blank(int len)
{
	int i,j;
	for(i=0,j=0;i


你可能感兴趣的:(判断表达式是否合法(推荐:*****))