栈和栈的应用(后缀表达式的转化和简单计算器)
目录
- 栈
- 栈的特点
- 栈的常用方法
- 初始化
- 判断是否为空栈
- 入栈
- 出栈
- 返回栈顶元素
- 返回栈中元素数量
- 栈的应用
- 后缀表达式的转化
- 简单计算器
1,输入一个包含圆括号、加、减、乘、除、求余等符号组成的算术表达式字符串,输出该算术表达式的值。要求:
(1)系统至少能实现加、减、乘、除、求余等运算;
(2)利用栈的后进先出特性实现;
(3)先将输入的算术表达式转换为后缀表达式,并输出后缀表达式;
(4)利用后缀表达式输出表达式的计算结果。
关键代码:
处理算术表达式
void manage(string input){
stack<int> number;
stack<char> sign;
int count=0;
double result=0;
string houzhui;
while(count<input.length()){
//判断字符还是数字
bool yes=isSign(input[count]);
if(yes){
manageChar(input[count],number,sign,houzhui);
}else{
number.push(input[count]-'0');
houzhui+=input[count];
}
count++;
}
while(!sign.empty()){
houzhui+=sign.top();
calculate(number,sign.top());
sign.pop();
}
cout<<"后缀表达式为:";
cout<<houzhui<<endl;
cout<<"计算结果为:";
cout<<number.top()<<endl;
}
处理字符
void manageChar(char input,stack<int> &number,stack<char> &sign,string &houzhui){
if(sign.empty()||input=='('){
sign.push(input);
}else if(input==')'){
while(sign.top()!='('&&!sign.empty()){
houzhui+=sign.top();
calculate(number,sign.top());
sign.pop();
}
sign.pop();//弹出'('
}else{
if(charWeight(input)>charWeight(sign.top())){
sign.push(input);
}else{
do{
houzhui+=sign.top();
calculate(number,sign.top());
sign.pop();
}while(charWeight(input)<=charWeight(sign.top()));
sign.push(input);
}
}
}
运算
void calculate(stack<int> &number,char input){
int firstNum,secondNum;
firstNum=number.top();
number.pop();
secondNum=number.top();
number.pop();
switch(input){
case '+':firstNum+=secondNum;break;
case '-':firstNum=secondNum-firstNum;break;
case '*':firstNum*=secondNum;break;
case '/':firstNum=secondNum/firstNum;break;
case '%':firstNum=secondNum%firstNum;break;
default:cout<<"出错了!!!";
}
number.push(firstNum);
}
运行截图
完整代码点击这里。 ??