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

怎么就一路Runtime Error呢,大虾帮我看下

Posted by wklove at 2008-07-31 07:21:31 on Problem 2106
#include<iostream>
using namespace std;
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

typedef char ele;


typedef struct Stack
{
        ele data;
        struct Stack *next;
}Stack,*sta;

void CreateStack(sta &L)
{
		L=(sta)malloc(sizeof(Stack));
		if(L)
				L->next=NULL;
}

void push(sta &L,ele e)
{
		Stack *q,*top;
		top=L;
		q=(sta)malloc(sizeof(Stack));
		if(q)
		{
				q->data=e;
				q->next=top->next;
				top->next=q;
		}
}

char pop(sta &L,ele &e)
{
		Stack *top,*q;
		top=L;
		e=top->next->data;
		q=top->next;
		top->next=q->next;
		free(q);
		return e;
}

char gettop(sta &L)
{
	    Stack *top;
		top=L;
        ele e;
		e=top->next->data;
		return e;
		
}

int pritab(int m,int n)
{
		int a[6][6];
		int i,j;
		for(i=0;i<6;i++)
		{
				for(j=0;j<6;j++)
				{
						a[i][j]=1;
				}
			
				
		}	
		a[5][5]=a[3][4]=0;
		a[0][2]=a[0][3]=a[0][1]=-1;
		a[1][2]=a[1][3]=-1;
		a[2][3]=-1;
		for(i=0;i<4;i++)
		{
				a[3][i]=-1;
				a[5][i]=-1;
		}
		return a[m][n];
}



int jude(char ch)
{
		int i=0,flag=1;
		char opr[6]={'(',')','!','|','&','#'};
		for(;i<6;i++)
				if(ch==opr[i])
						flag=0;
		return flag;
}

int constrast(char ch)
{
		switch(ch)
		{
			    
				case '|':return 0; break;
				case '&':return 1; break;
				case '!':return 2; break;
				case '(':return 3;break;				
				case ')':return 4; break;
				case '#':return 5; break;
		}
}


char Compare(char opr,char ch)
{
		int m=0,n=0;
		char tag;
		m=constrast(opr);
		n=constrast(ch);
		if(pritab(m,n)==1)
				tag='>';
		if(pritab(m,n)==0)
				tag='=';
		if(pritab(m,n)==-1)
				tag='<';
		return tag;
}


char wk(char a,char c,char b)
{
		//if((a=='F'&&b=='F'&&c=='|')||(c=='&'&&a=='F'&&b=='F')||(c=='&'&&a=='V'&&b=='F')||(c=='&'&&a=='F'&&b=='V'))
	if((a=='F'&&b=='F'&&c=='|')||(c=='&'&&(a=='F'||b=='F')))
				return 'F';
		else 
				return 'V';
}


char wk1(char c,char b)
{
		if(c=='!'&&b=='V')
				return 'F';
		if(c=='!'&&b=='F')
				return 'V';
}

void fun(char inputchar[1000],int len)
{
		int k=0;
		char ch=' ',theta=' ',a=0,b=0;
		sta OPRDATA;
		sta OPTR;
		CreateStack(OPRDATA);
		CreateStack(OPTR);
		push(OPTR,'#');
		for(k=0;k<len;)
		{			    
				     
			    ch=inputchar[k];
				if(ch!='#'||gettop(OPTR)!='#')
				{
						int temp;					
								temp=jude(ch);				
								if(temp)
								{
										push(OPRDATA,ch);
										++k;
								}
								else
								{
										switch(Compare(gettop(OPTR),ch))
										{
												case '<':
														push (OPTR,ch);
														++k;
														break;
												case '=':
														pop(OPTR,ch);
														++k;
														break;
												case '>':
													{
														if(ch=='!'&&inputchar[k-1]=='!')
														{
															push (OPTR,ch);
															k++;
															break;
														}
														theta=gettop(OPTR);
														pop(OPTR,theta);
														pop(OPRDATA,b);
														if(theta=='!')
														{
																push(OPRDATA,wk1(theta,b));
														}
														else
														{												
																pop(OPRDATA,a);
																push(OPRDATA,wk(a,theta,b));													
														}
														//I=k;
														
														break;
														
													}
										}
								}
				}
				else
					break;
		}
		cout<<gettop(OPRDATA)<<endl;		
}

int main()
{
		//freopen("2106.txt","r",stdin);
		int o=0;
		char inputchar[1000]={'\0'};
		char ch=' ';
		int len=0,i=0;
		while(1)
		{
			    i=0;
				memset(inputchar,'\0',sizeof(inputchar));
				while(ch=getchar(),ch!='\n')
				{
					if(ch!=' ')
					{
						inputchar[i++]=ch;
					}
				}
				inputchar[i]='#';
				len=strlen(inputchar);
				if(len==1)
				{
					break;
				}
				cout<<"Expression "<<++o<<": ";
				fun(inputchar,len);								
		}
		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