Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:怎么就一路Runtime Error呢,大虾帮我看下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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator