逆波兰式实现四则运算表达式计算器支持括号、十六进制 (二)

2014-11-23 23:40:11 · 作者: · 浏览: 21
{
if (str[k] >= '0' && str[k] <= '9')
{
inte = inte*16+(str[k]-'0');//这里要区分是不是0-9 a-f
}
else
{
inte = inte*16+(str[k]-87);
}
}
figure[figNum] = inte;
dest[destNum] = figNum + '1';
destNum++;
figNum++;
i= j;
}
else
{
while(str[j]>='0' && str[j] <= '9')
{
j++;
}
j--;

for (int k = i; k <= j; k++)
{
inte = inte*10+str[k]-'0';
}
j++;

if (str[j] == '.')
{
powNum = 1;
i = j+1;
j = j+1;
while(str[j]>='0' && str[j] <= '9')
{
j++;
}
for (int k = i; k < j; k++)
{
float tempf = pow(0.1,powNum);
powNum++;
fnum=fnum+tempf*(str[k]-'0');
}
i = j;
figure[figNum] = inte+fnum;
dest[destNum] = figNum + '1';
destNum++;
figNum++;
}
else
{
i = j;
figure[figNum] = inte;
dest[destNum] = figNum + '1';
destNum++;
figNum++;
}
}
}
else
{
dest[destNum] = str[i];
i++;
destNum++;
}
}
dest[destNum] = '\0';
}
}

//把数字都拆出来,然后放进figure数组中,将原字符串复制到dest中,
//同时,数字全部用figure中对应的小标代替
void cToFig(char* dest,char* str,float* figure)
{
if (NULL == str)
{
printf("字符串为空!\n");
}
else
{
int j = 0;
int figNum= 0;//figure下标
int powNum = 1;//pow的次数
int destNum = 0;//dest的下标
int i = 0;

while(str[i]!='\0')
{
if (str[i] >= '0' && str[i] <= '9')
{
j = i+1;
int inte = 0;//整数
float fnum = 0.0;//浮点数

if (str[j] == 'x')//出现十六进制
{
j++;
while ((str[j]!= NULL)&&(!isOperator(str[j])))
{
j++;
}
//计算出十六进制
for (int k = i+2; k < j; k++)
{
if (str[k] >= '0' && str[k] <= '9')
{
inte = inte*16+(str[k]-'0');//这里要区分是不是0-9 a-f
}
else
{
inte = inte*16+(str[k]-87);
}
}
figure[figNum] = inte;
dest[destNum] = figNum + '1';
destNum++;
figNum++;
i= j;
}
else
{
while(str[j]>='0' && str[j] <= '9')
{
j++;
}
j--;

for (int k = i; k <= j; k++)
{
inte = inte*10+str[k]-'0';
}
j++;

if (str[j] == '.')
{
powNum = 1;
i = j+1;
j = j+1;
while(str[j]>