简单的计算器(三)
ElementType * cdata1 = NULL;
cdata1 = (ElementType *)malloc(sizeof(ElementType));//必须进行初始化
ElementType * cdata2 = NULL;
cdata2 = (ElementType *)malloc(sizeof(ElementType));//必须进行初始化
while(*(str+i))
{
switch(IsNumber(str+i))
{
case 1:
*(tmp+k) = *(str+i);
k++;
break;
case 0:
if (k!=0)
{
tmpdata = atof(tmp);
tmpElem->data = tmpdata;
Push(cal->spdata,tmpElem);
}
s = 0;
while(*(tmp+s))
{
*(tmp+s) = NULL;
s++;
}
k = 0;
if (k==0)
{
tmpElem->symbol = *(str+i);
Push(cal->spsymbol,tmpElem);
}
break;
}
while(cal->spsymbol->top>0)
{
Pop(cal->spsymbol,signl);
sl = signl->symbol;
Pop(cal->spsymbol,signf);
sf = signf->symbol;
tabsign = SignTabR(sf,sl);
switch(tabsign)
{
case -1 : /* -1 入栈 */
/* 解析的同时已经入栈 */
break ;
case 0 : /* 0 出栈 */
Pop(cal->spsymbol,signf);
Pop(cal->spsymbol,signf);
break ;
case 1 : /* 1 执行 */
Pop(cal->spdata,cdata2);
data2 = cdata2->data;
Pop(cal->spdata,cdata1);
data1 = cdata1->data;
resultfs = SignFun(&data1,&data2,signf);
tmpElem->data = resultfs;
Push(cal->spdata,tmpElem);
tmpElem->symbol = sl;
Push(cal->spsymbol,tmpElem);
break;
case 2 : /* 2 错误 */
printf("表达式出错!");
break ;
default :
break ;
}
}
i++;
}
Pop(cal->spdata,cdata1);
printf("%f",cdata1->data);
return 1;
}
int main()
{
Cal *cal = InitCal(10);
char *str = GetStr();
if (Yanzheng(str))
{
ClaExpress(cal,str);
}
else
{
printf("字符串表达式出错!");
}
DestroyCal(cal);
return 1;
}
仅仅实现了简单的功能,做个参考吧。