{
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';
}
}
然后是将转化后的仅包含int型的中缀表达式转化为后缀表达式。中缀表达式转化为后缀表达式需要借助栈,当遇到操作数时放入数组压入栈,当遇到操作符时与栈顶元素进行比较,如果优先级低于栈顶元素则依次弹出,否则入栈,当遇到‘(’,直接压栈,但是遇到‘)',将栈内元素依次弹入到数组中直到遇到‘(’,具体实现如下:
[cpp]
void midToback(char* backStr, char* midStr,int& m)
{
if (NULL == midStr)
{
printf("表达式为空!\n");
}
else
{
stack
//initStack(oper);
int len = strlen(midStr);
//char operOfMid = '\0';
for (int i = 0; i < len; i++)
{
//遇见表示操作数的数组下标
if (midStr[i] >= '1')
{
backStr[m] = midStr[i];
m++;
}
else if (midStr[i] == '(')
{
oper.push(midStr[i]);
}
else if (midStr[i] == '+')
{
//operOfMid = oper.top();
while (!oper.isEmpty()&&((oper.topElem()=='-') ||(oper.topElem()=='*')||(oper.topElem()=='/')||(oper.topElem()=='+')))
{
backStr[m++] = oper.topElem();
oper.pop();
}
oper.push(midStr[i]);
}
else if (midStr[i] == '-')
{
while (!oper.isEmpty()&&((oper.topElem()=='-') ||(oper.topElem()=='*')||(oper.topElem()=='/')))
{
backStr[m++] = oper.topElem();
oper.pop();
}
oper.push(midStr[i]);
}
else if ((midStr[i] == '*')||(midStr[i] == '/'))
{
oper.push(midStr[i]);
}
else if (midStr[i] == ')')
{
while(oper.topElem()!= '(')
{
backStr[m++] = oper.topElem();
oper.pop();
}
oper.pop();
}
}
while(!oper.isEmpty())
{
backStr[m++] = oper.topElem();
oper.pop();
}
backStr[m] = '\0';
}
}
void midToback(char* backStr, char* midStr,int& m)
{
if (NULL == midStr)
{
printf("表达式为空!\n");
}
else
{
stack
//initStack(oper);
int len = strlen(midStr);
//char operOfMid = '\0';
for (int i = 0; i < len; i++)
{
//遇见表示操作数的数组下标
if (midStr[i] >= '1')
{
backStr[m] = midStr[i];
m++;
}
else if (midStr[i] == '(')
{
oper.push(midStr[i]);
}
else if (midStr[i] == '+')
{
//operOfMid = oper.top();
while (!oper.isEmpty()&&((oper.topElem()=='-') ||(oper.topElem()=='*')||(oper.topElem()=='/')||(oper.topElem()=='+')))
{
backStr[m++] = oper.topElem();
oper.pop();
}
oper.push(midStr[i]);
}
else if (midStr[i] == '-')
{
while (!oper.isEmpty()&&((oper.to