| ||||||||||
| 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