设为首页 加入收藏

TOP

C语言:逆波兰表达式代码(二)
2014-11-24 00:36:28 来源: 作者: 【 】 浏览:69
Tags:语言 波兰 表达式 代码

for (i = 0; string[i] != '\0' && string[i] != '=';)
{
//从输入串中取出一个字符作为开始,进行处理,直到表达式结束
if (string[i] >= '0' && string[i] <= '9')
{
//如果是操作数,将整个操作数提取出来,压入操作数栈
pushNumber(getNumFromString(&string[i], &i));
}
else
{
op.name = string[i];
op.priority = getPriority(string[i]);
op.opnum = getOpNum(string[i]);
topOp = popOperator();
if (op.name == '(')
{
//如果是'(',将从栈顶弹出的运算符压回栈内,并将当前运算符则压栈
pushOperator(topOp);
pushOperator(op);
}
else if (op.name == ')')
{
//如果是')',则进行运算,每次运算结果作为一个操作数压入操作数栈,直到将'('弹出运算符栈
while (topOp.name != '(')
{
pushNumber(operate(topOp));
topOp = popOperator();
}
}
else
{
//如果是普通运算符
if (topOp.name != '#' && op.priority <= topOp.priority)
{
//如果运算符栈非空,且当前运算符的优先级大于栈顶运算符,则进行一次运算,将结果压入操作数栈
pushNumber(operate(topOp));
}
else
{
//否则将从栈顶弹出的运算符压回
pushOperator(topOp);
}
//将当前运算符压栈
pushOperator(op);
}
i++;
}
}
//完成栈内剩余的运算
while ((topOp = popOperator()).name != '#')
{
pushNumber(operate(topOp));
}
//操作数栈中剩下的最后一个数即为结果
printf("%f\n", popNumber());
return 0;
}

作者:卞昊穹

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇用数组去实现队列(c) 下一篇C语言可变参数全解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: