简单计算器

#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<memory.h>
#include<algorithm>
#include<cstring>
using namespace std;

char e[250],post[250];
stack<char>Op;

bool Isnum(char c)
{
	if(c>='0'&&c<='9')
		return true;
	return false;
}

int OPMode(char c)
{
	if(c=='+')		return 1;
	if(c=='-')		return 2;
	if(c=='*')		return 3;
	if(c=='/')		return 4;
	return -1;
}

void SplitExp(char* s)
{
	int i,j=0;
	memset(post,'\0',sizeof(post));
	for(i=0;i<strlen(s);i++)
	{
		if(s[i]==' ')
			continue;
		post[j++]=' ';
		while(Isnum(s[i]))
			post[j++]=s[i++];
		int curop=OPMode(s[i]);
		if(curop!=-1)
		{
			if(curop<=2)
				while(!Op.empty())
				{
					post[j++]=Op.top();
					Op.pop();
				}
			else
			{
				while(!Op.empty()&&OPMode(Op.top())>2)
				{
					post[j++]=Op.top();
					Op.pop();
				}
			}
			Op.push(s[i])	;
		}
	}
	while(!Op.empty())
	{
		post[j++]=Op.top();
		Op.pop();
	}
}

stack<double>Num;
double Cal()
{
	while(!Num.empty())
		Num.pop();
	int i=0,j;
	int len=strlen(post);
	while (i++<len)
	{
		if(post[i]==' ')
			continue;
		double cur=0;
		bool hasnum=false;
		while (Isnum(post[i]))
		{
			cur*=10;
			cur+=post[i++]-'0';
			hasnum=true;
		}
		if(hasnum)
			Num.push(cur);
		if(OPMode(post[i])!=-1)
		{
			double num1=Num.top();
			Num.pop();
			double num2=Num.top();
			Num.pop();
			switch(post[i])
			{
			case '+':		Num.push(num2+num1);break;
			case '-':		Num.push(num2-num1);break;
			case '*':		Num.push(num2*num1);break;
			case '/':		Num.push(num2/num1);break;
			}
		}
	}
	return Num.top();
}

int main()
{
	while(gets(e))
	{
		SplitExp(e);
		printf("%.2f\n",Cal());
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值