Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

谁能帮我看一下啊?Discuss的所有建议都通过了,但就是WA

Posted by huanghongxun at 2012-07-25 08:38:13 on Problem 2106
#include<iostream> 
#include<string>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include <stack>
#define max 200
using namespace std;
long double str2num(const char *s)
{
	long double num;
	sscanf(s, "%lf", &num);
	return num;
}
char ex[max]; //存储后缀表达式
string str; //存储原算术表达式
void trans() //将算术表达式转化为后缀表达式
{
	char stack[max]; //作为栈使用
	char ch;
	int i,j,t,top=0;
	i=0; //获取用户输入的表达式
	str.append("#");
	t=0;i=0;
	ch=str[i];i++;
	while(ch!='#'){
		switch(ch){
		case '(': //判定为左括号
			stack[++top]=ch;
			break;
		case ')': //判定为右括号
			while(stack[top]!='('&&top>-1)
				ex[t++]=stack[top--];
			top--;
			break;
		case '|': //判定为或
			while(top!=0&&stack[top]!='(')
				ex[t++]=stack[top--];
			stack[++top]=ch;
			break;
		case '&': //判定为且
			while(stack[top]=='&')
				ex[t++]=stack[top--];
			stack[++top]=ch;
			break;
		case '!':
			stack[++top] = ch;
			break;
		case '#':
			break;
		case ' ':
			break;
		case 'V':
		case 'F':
			while(ch=='V'||ch=='F') //判定为布尔
			{
				ex[t++]=ch;
				ch=str[i++];
			}
			i--;
			break;
		}
		ch=str[i];i++;
	}
	while(top!=0)
		ex[t++]=stack[top--];
	ex[t]='#';
}
void compvalue(int Case){ //计算后缀表达式的值
	bool stack[max],d; //作为栈使用
	char ch;
	int t=0,top=0; //t为ex下标,top为stack下标
	ch=ex[t++];
	string digit;
	while(ch!='#'){
		switch(ch){
		case '|':
			if(stack[top-1]==1||stack[top]==1)stack[top-1]=1;
			else stack[top-1]=0;
			top--;
			break;
		case '&':
			if(stack[top-1]==1&&stack[top]==1)stack[top-1]=1;
			else stack[top-1]=0;
			top--;
			break;
		case '!':
			if(stack[top]==1)stack[top]=0;
			else stack[top]=1;
			break;
		case 'V':
			stack[++top]=1;
			break;
		case 'F':
			stack[++top]=0;
			break;
		}
		ch=ex[t];t++;
	}
	printf("Expression %d: %c\n", Case, stack[top]?'V':'F');
}
int main(){
	int Case = 0;
	char *s = new char[255];
	while(gets(s))
	{
		str = string(s);
		Case++;
		trans();
		compvalue(Case);
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator