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

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

Posted by y09shiyuqing at 2009-08-10 10:44:00 on Problem 2106
In Reply To:怎么就一路Runtime Error呢,大虾帮我看下 Posted by:wklove at 2008-07-31 07:21:31
> #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