计算中缀表达式(实数,四则运算与括号)(双栈)

之前写过这方面的算法,用的思想是先将中缀表达式转化为后缀表达式,再计算。本文采用直接计算中缀表达式的方法,用两个栈分别保存,运算符和数值。另外在处理括号问题时,抛开之前增大优先级的繁琐方法,直接把括号当做一条新的式子,计算后返回一个值到原式,这也算是递归思想。最后,此次把数据域扩充到实数域。       瑕疵:代码没有考虑除以0和一些不符合的情况,即输入的式子都是符合运算法则的。因为只是想体现
摘要由CSDN通过智能技术生成

        之前写过这方面的算法,用的思想是先将中缀表达式转化为后缀表达式,再计算。本文采用直接计算中缀表达式的方法,用两个栈分别保存,运算符和数值。另外在处理括号问题时,抛开之前增大优先级的繁琐方法,直接把括号当做一条新的式子,计算后返回一个值到原式,这也算是递归思想。最后,此次把数据域扩充到实数域。

       瑕疵:代码没有考虑除以0和一些不符合的情况,即输入的式子都是符合运算法则的。因为只是想体现算法的核心,没有必要搞得太繁琐,需要的时候再加就是了。

 

#include<iostream>
#include<stack>
#include<string>
using namespace std;
const int power[6]={2,1,0,1,0,2};//四则运算的优先级,分别对应*,+, ,-, ,/ 
double tqn(char s[],int &i)//提取数字 
{
	double result=0;
	int j;
	while(s[i]!='.'&&s[i]!='+'&&s[i]!='-'&&s[i]!='*'&&s[i]!='/'&&s[i]!='('&&s[i]!=')'&&s[i]!='\0')//整数部分 
	{
		result=result*10+s[i]-'0';
		i++;
	}
	if(
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值