您的位置:首页 > 其它

C表达式求值做加法和乘法

2015-07-23 14:32 405 查看
/*
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: