您的位置:首页 > 其它

利用STL容器stack实现一个简单的计算器

2017-03-23 15:00 441 查看
规则:



#include <iostream>
#include <cstring>
#include <stack>
using namespace std;

stack<int>Num;
stack<char>Op;
const int max_size = 1024;

/*将字符串转为int*/
int str2num(char **str)
{
int temp = 0;
while(**str >= '0' && **str <= '9')
{
temp = temp * 10 + (**str - '0');
(*str)++;
}

return temp;
}

int cal(int a,int b,char op)
{
switch(op)
{
case '+':return a + b;break;
case '-':return a - b;break;
case '*':return a * b;break;
case '/':return a / b;break;
default:break;
}
}
void handlebuffer(char *str)
{
if(str == NULL)
{
return;
}
int num;
int a;
int b;
char op;
char *temp = str;

while(*temp != '\0')
{
if(*temp >= '0' && *temp <= '9')
{
num = str2num(&temp);
Num.push(num);
}
switch(*temp)
{
case '(':
{
Op.push(*temp);
break;
}
case ')':
{
b = Num.top();
Num.pop();
a = Num.top();
Num.pop();
op = Op.top();
Op.pop();
num = cal(a,b,op);
Num.push(num);
Op.pop(); //将'('出栈
break;
}
case '+':
{

if(Op.empty() != true) //当stack为空时,stack.top()使用时,方法会出错
{
if(Op.top() == '+' || Op.top() == '-' || Op.top() == '*' || Op.top() == '/')
{
b = Num.top();
Num.pop();
a = Num.top();
Num.pop();

num = cal(a,b,*temp);
Num.push(num);
break;
}
}
Op.push(*temp);
break;

}
case '-':
{
if(Op.empty() != true)
{
if(Op.top() == '+' || Op.top() == '-' || Op.top() == '*' || Op.top() == '/')
{
b = Num.top();
Num.pop();
a = Num.top();
Num.pop();

num = cal(a,b,*temp);
Num.push(num);
break;
}
}
Op.push(*temp);
break;

}
case '*':
{

if(Op.empty() != true)
{

if(Op.top() == '*' || Op.top() == '/')
{
b = Num.top();
Num.pop();
a = Num.top();
Num.pop();

num = cal(a,b,*temp);
Num.push(num);
break;
}
}
Op.push(*temp);
break;
}
case '/':
{
if(Op.empty() != true)
{
if(Op.top() == '*' || Op.top() == '/')
{
b = Num.top();
Num.pop();
a = Num.top();
Num.pop();

num = cal(a,b,*temp);
Num.push(num);
break;
}
}
Op.push(*temp);
break;
}
}
temp++;
}

while(Op.empty() != true)
{
b = Num.top();
Num.pop();

a = Num.top();
Num.pop();

op = Op.top();
Op.pop();
num = cal(a,b,op);
Num.push(num);
}

num = Num.top();
Num.pop();

cout << "result = " << num << endl;
}

int main()
{
char buffer[max_size];
cout << "Please input 1 + 2 + 3 *(4 + 5)" << endl;
cin.getline(buffer,max_size);

handlebuffer(buffer);
return 0;

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