简单的计算器(二)

2014-11-24 08:38:22 · 作者: · 浏览: 1
int IsInt(char *sign)
{
if(*sign>='0' && *sign<='9')
{
return 1;
}
return 0;
}
int Yanzheng(char * str)
{
int i =0;
int j = 0;
int flag = 0;
int zuok = 0;
int youk = 0;
char *sy = "+-*/()#.0123456789";
while(*(str+i))
{
while(*(sy+j))
{
if (*(sy+j) == *(str+i))
{
flag = 1;
break;
}
else
{
flag = 0;
}
j++;
}
j=0;
if (flag)
{
i++;
}
else
{
flag = 0;
return flag;
}
}
i =0;
while(*(str+i))
{
if (*(str+i)=='(')
{
zuok++;
}
if (*(str+i)==')')
{
youk++;
}
for (int m =0; m<4;m++)
{
if (*(str+i)==*(sy+m))
{
if (IsInt(str+i+1) || *(str+i+1)=='#' || *(str+i+1) == '(' || *(str+i+1) == ')')
{
flag = 1;
}
else
{
flag = 0;
return flag;
break;
}
}
}
i++;
}
if (zuok==youk)
{
flag = 1;
}
else
{
flag = 0;
}
return flag;
}
int ShowStack(ElementType *pdata)
{
printf("%f ",*pdata);
return 1;
}
void FreeTwoStack(Cal *cal)
{
if (cal->spdata)
{
free(cal->spdata);
cal->spdata = 0;
}
if (cal->spsymbol)
{
free(cal->spsymbol);
cal->spsymbol = 0;
}
}
int DestroyCal(Cal *cal)
{
if(cal)
{
FreeTwoStack(cal);
free(cal);
return 1;
}
return 0;
}
double SignFun(double *frist,double *last,ElementType *sign)
{
switch(sign->symbol)
{
case '+':
return *frist + *last;
break;
case '-':
return *frist - *last;
break;
case '*':
return (*frist) * (*last);
break;
case '/':
return (*frist) / (*last);
break;
}
return 0;
}
int SignTabR(char signf,char signl)
{
int x = 0;
int y = 0;
int i=0;
char str[] = "+-*/()#";
for(i=0;i<(int)strlen(str);i++)
{
if(signf==*(str+i))
{
x = i;
}
if(signl==*(str+i))
{
y = i;
}
}
return SignTab[x][y];
}
int IsNumber(char * str)
{
return ( (*str >= 0x30 && *str <= 0x39) || (*str == '.') ) 1 : 0 ;
}
int ClaExpress(Cal *cal,char *str)
{
int i = 0;
int k = 0;
int s = 0;
char sf;
char sl;
int tabsign;
double data1;
double data2;
double resultfs;
char tmp[50] = {0};
double tmpdata;
ElementType *tmpElem = NULL;//申请的空间太多了。
tmpElem = (ElementType *)malloc(sizeof(ElementType));
ElementType * signf = NULL;
signf = (ElementType *)malloc(sizeof(ElementType));
ElementType * signl = NULL;
signl = (ElementType *)malloc(sizeof(ElementType));