以下代码有什么可以改进的地方,有什么bug吗?
#include <iostream>
#include"string.h"
using namespace std;
void rule1(char a[],int i)
{
if((a[i]>='a')&&(a[i]<='z'))
{
a[i]='1';
}
else if(a[i]=='0')
a[i]='1';
}
int rule2(char a[],int i)
{
int n=strlen(a);
int _result=0;
if((i+1<n)&&(a[i]=='!')&&(a[i+1]=='1'))
{a[i]='1';
i++;
while(a[i+1]!='\0')
{
a[i]=a[i+1];
i++;
}
a[i]='\0';
_result=1;
}
else if((i+2<n)&&(a[i]=='(')&&(a[i+1]=='1')&&(a[i+2]==')'))
{
a[i]='1';
i++;
while(a[i+2]!='\0')
{
a[i]=a[i+2];
i++;
}
a[i]='\0';
_result=1;
}
return _result;
}
int rule3(char a[],int i)
{int _result=0;
int n=strlen(a);
if((i+2<n)&&(a[i]=='1')&&((a[i+1]=='+')||(a[i+1]=='*')||(a[i+1]=='-')||(a[i+1]=='='))&&(a[i+2]=='1'))
{
a[i]='1';
i++;
while(a[i+2]!='\0')
{
a[i]=a[i+2];
i++;
}
a[i]='\0';
_result=1;
}
return _result;
}
int main()
{
char pstate[120],pstate0[120];
int i=0,nold=0,nnew=0;
printf("请输入公式(析+,合*,条-,双=,否!,01):\n");
gets(pstate0);
fflush(stdin);
nold=strlen(pstate0)+1;
nnew=strlen(pstate0);
for(i=0;i<nnew;i++)
{
pstate[i]=pstate0[i];
}
pstate[i]='\0';i=0;
while(i<strlen(pstate)){
rule1(pstate,i);
i++;
}
nold=strlen(pstate0)+1;
nnew=strlen(pstate);
while(nnew<nold){
nold=strlen(pstate);
i=0;
while(i<strlen(pstate))
{
if(rule2(pstate,i)==0)
i++;
}
i=0;
while(i<strlen(pstate)){
if(rule3(pstate,i)==0)
i++;
}
}
if((pstate[0]=='1')&&(strlen(pstate)==1))
printf("%s is valid\n",pstate0);
else{
printf("%s is invalid\n",pstate0);}
return 0;
}