/*
Name: 表达式 包含乘法和加法,
Copyright: hc
Author: hc
Date: 06/05/15 16:46
Description: 思路【数据表达式是先数字再符号再数字,所以就 先读第一数字,以后都认为是符号 和一个数字,这样以后就都可以以判别符号是不是'\n'来判别
*/
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int a,c,x,y,z,temp,i=0,j=0;
char b;
stack<int> num;//数字栈
stack<char> exp;//符号栈
scanf("%d",&a);//先获取一个数字
num.push(a);//把数据进入数字栈
// cout<<"读取第"<<++i<<"个数字"<<a<<endl;
while(scanf("%c",&b)==1)//判别字符
{
// cout<<"读取第"<<++j<<"个符号"<<b<<endl;
//cout<<a<<endl;
if(b!='\n')//如果不是结尾
{
if(b=='*')//判断是不是乘号
{
cin>>c;//读一个数字
temp=num.top();//取出另一个数字
num.pop();//从堆栈中去掉这个数字
temp=temp*c;//堆栈数字temp乘以读入的数字c
// scanf("%c",&b);//cin>>b; //这是一个出错点
// if (b=='\n') break;
num.push(temp);//把乘法结果入栈
// cout<<"数字栈中的值有"<<num.top()<<endl;
}
else //如果不是乘法那么就是加法
{
cin>>c;
//a=a+c;
num.push(c);//数字入栈
exp.push(b); //符号入栈
}
}
else//如果到了文件尾部
{
// cout<<"这是进入到没有标点符号的情况";
while(!exp.empty())//这个是字符也就是标点符号堆栈,现在都是低级的运算法,加法
{
exp.pop();//符号出栈丢掉
x=num.top();//数字赋值
num.pop();//数字出栈丢掉
y=num.top();//数字赋值
num.pop();//数字出栈丢掉
z=x+y;//加法
num.push(z);//把结果写入到堆栈
}
break;
}
}
cout<<num.top();//最后数字栈里面存着结果
system("pause");
return 0;
}
C表达式求值做加法和乘法
最新推荐文章于 2024-01-30 23:29:11 发布