uva 327 Evaluating Simple C Expressions

计算C表达式的值

直接模拟,不知为什么wa了

#include<stdio.h>

#include<string.h>
#define max 10010
char p[max],q[max],c[max];
int l;
int val[27][2];
void init(char a[])
{
memset(val,0,sizeof(val));
l=strlen(a);
int i;
for(i=0;i<27;i++)
val[i][1]=0;
for(i=0;i<l;i++)
{
if(a[i]>='a'&&a[i]<='z')
{
val[a[i]-96][0]=a[i]-96;
val[a[i]-96][1]=1;
}


}
}
void renew(char c[])
{
int i;
for(i=0;i<l;i++)
{
if(c[i]>='a'&&c[i]<='z')
c[i]=val[c[i]-96][0];
}
}
void qzijia(char a[])
{
int i; l=strlen(a);
for(i=0;i<=l-2;i++)
{
if(a[i]=='+'&&a[i+1]=='+'&&a[i+2]>='a'&&a[i+2]<='z')
{

val[a[i+2]-96][0]++;
a[i]=1;
a[i+1]=1;
}
if(a[i]=='-'&&a[i+1]=='-'&&a[i+2]>='a'&&a[i+2]<='z')
{
val[a[i+2]-96][0]--;
a[i]=1;
a[i+1]=1;
}
}

int j=0;
char b[max];
for(i=0;i<l;i++)
{
if(a[i]!=1)
b[j++]=a[i];
}
b[j]=0;
strcpy(a,b);


}
void qhj(char c[])
{
int i; l=strlen(c);
for(i=1;i<=l-2;i++)
{
if(c[i]=='+'&&c[i+1]=='+'&&c[i-1]>='a'&&c[i-1]<='z')
{
c[i]=1;
c[i+1]=1;
}
if(c[i]=='-'&&c[i+1]=='-'&&c[i-1]>='a'&&c[i-1]<='z')
{
c[i]=1;
c[i+1]=1;
}
}
int j=0;
char d[max]="";
for(i=0;i<l;i++)
{
if(c[i]!=1)
d[j++]=c[i];
}
d[j]=0;

strcpy(c,d);

}

void hzijia(char *a)
{
l=strlen(a);int i;
for(i=1;i<=l-2;i++)
{
if(a[i]=='+'&&a[i+1]=='+'&&a[i-1]>='a'&&a[i-1]<='z')
{
val[a[i-1]-96][0]++;
a[i]=1;
a[i+1]=1;
}
if(a[i]=='-'&&a[i+1]=='-'&&a[i-1]>='a'&&a[i-1]<='z')
{
val[a[i-1]-96][0]--;
a[i]=1;
a[i+1]=1;
}
}
int j=0;char b[max];
for(i=0;i<l;i++)
{
if(a[i]!=1)
b[j++]=a[i];
}
b[j]=0;
strcpy(a,b);
l=strlen(b);
}
int value(char a[])
{
l=strlen(a);
int i;
int v=a[0];
for(i=1;i<l;i++)
{
if(a[i]=='+')
{
v+=a[i+1];
i=i+1;
continue;
}
else if(a[i]=='-')
{
v-=a[i+1];
i=i+2;
continue;
}
}
return v;
}
int main()
{
int i,j,k,m,n;
while(gets(p))
{
if(p[0]==0)
continue;
l=strlen(p);j=0;
printf("Expression: %s\n",p);
for(i=0;i<l;i++)
{
if(p[i]!=32)
{
q[j]=p[i];
j++;
}
}
l=strlen(q);
q[j]=0;
strcpy(p,q);init(p);
qzijia(p);qhj(p);
renew(p);
printf("    value = %d\n",value(p));
init(q);
qzijia(q);
hzijia(q);
renew(q);
for(i=1;i<27;i++)
{
if(val[i][1]!=0)
printf("    %c = %d\n",i+96,val[i][0]);
}
}
return 0;
}



你可能感兴趣的:(uva 327 Evaluating Simple C Expressions)